# Full text of "CENFOR : Census FORTRAN manual"

## See other formats

FT?

to /'■

«

CENFOR

CENSUS FORTRAN

MAN UA L

DEPARTMENT OF COMMERCE
BUREAU OF THE CENSUS
MARCH 1971

*

PREFACE

Elements of the FORTRAN language and the implementations for data
processing at the Bureau of the Census on UNIVAC equipment are
presented in this manual.

Census subroutines and functions, reference lists, examples,
exercises and work procedures are included.

or recommended.

UNIVAC source manuals are listed in the bibliography for this manual,

9s

§

Bureau of the Census

•f 1971

o

a

4)

3

Digitized by the Internet Archive

in 2012 with funding from

LYRASIS Members and Sloan Foundation

http://archive.org/details/cenforcensusfortOOunit

i

Page 1

1. INTRODUCTION

1.1. Ever Wonder How A Computer Works?

1.1.1. Hardware vs. Software

1.1.2. Input Devices

1.1.3. Computer Language
1.1. 4-. Units of Information
1.1.5. Output Devices

1.2. Introduction to FORTRAN Programing

1.3. Internal Representation
1.3.1. Words

1.4. Number Systems

1.4.1. Binary

1.4.2. Octal

1.4.3. Number Conversion
1.4.4-. Arithmetic in other Bases

1.4.5. Conversion

1.4.5.1. Binary to Octal

1.4.5.2. Octal to Binary

1.4.5.3. Decimal-Octal Conversion

1.4.5.4. Binary-Decimal Conversion

1.4.5.5. Converting Fractions

1.4.5.6. Mixed Numbers

1.4.6. Signed Binary Numbers

1.4.7. Floating Point

1.4.8. Binary Coded Decimal Codes

1.4.9. Logical Operations

1.5. The 1107 Central Computer

1.5.1. The Control Portion

1.5.2. The Computer Memory

1.5.3. The Arithmetic Section
1.5-4. Input-Output Channels
1.5.5. Peripheral Equipment

1.6. Exercises

Page 2

2. THE FORTRAN LANGUAGE FUNDAMENTALS

2.1. Writing FORTRAN Programs

2.1.1. Basic Characters

2.1.2. Preparation of Programs and Related Materials for Key Punching

2.1.3. Source Statements

2.2. Constants

2.2.1. Integer- Fixed Point

2.2.2. Real-Single Precision Floating Point

2.2.3. Double Precision-Double Precision Floating Point
2.2.4.. Complex

2.2.5. Logical

2.3. Variables
2.4-. Operators

2.5. Expressions

2.5.1. Integer Division

2.5.2. Limitations of Arithmetic Operations

2.5.3. Function Reference

2.6. Arithmetic Assigment Statements

2.7. Arithmetic IF

2.8. Logical Expressions

2.9. Logical Statements

2.10. Logical IF

2.11. PARAMETER Variables

2.12. CONTINUE Statement

2.13. GO TO

2.13.1. The Unconditional GO TO

2.13.2. ASSIGN Statement

2.13.3. Assigned GO TO

2.14. Mathematical Functions
2.15- STOP

2.16. END

2.17. Exercises

Page 3

3. SUBSCRIPTED VARIABLES

3.1. Subscripts

3.1.1. Allowable Forms of Subscripts

3.1.2. Rules for Subscript Formation

3.1.3. Valid Subscripts Used with Array Eleiemefcs

3.1. 4. Invalid Subscripts Used with Array Elements

3.2. Arrays

3.2.1. One-Dimensional Array = "LIST"

3.2.2. Two-Dimensional Array = "TABLE"

3.2.3. Three-Dimensional Array = SET OF TABLES

3.3. Tables and Files

3.4. Dimension Limits

3.5. Mathematical Notation

4. THE DO STATEMENT

4.1. DO

4.2. DO- LOOPS

4.3. Nested DO-LOOPS

4.4. Materialization of the Index Variable

4.5. Frequent Uses of a DO-LOOP

4.6. Exercises Using the DO Instruction

5. FORTRAN I/O

5.1.2. Note on Method to Detect End-Of-Data on Tape

5.1.3. Formatted WRITE

5.1.4. Control of Print Files

5.1.5. READ and WRITE Name Lists

5.2. Implied DO

5.3. UNIT Assignments for FORTRAN READ/WRITE Statements

5.4. FORMAT Statement

5.4.1. Field Descriptors

5.4.2. Table of Editing Symbols

Page 4

5.^.3. Object Time FORMAT Statements

5. 4-. 4-. Rescanning

5.4.5. Specific Information Re Editing Codes

5.5. Tape Positioning Statements

5.5.1. END FILE

5.5.2. REWIND

5.5.3. BACKSPACE

5.6. UNFORMATTED Input and Output

5.7. Printing a Formatted Tape

5.8. Exercises

6. FUNCTION AND SUBROUTINE PROCEDURES

6.1. General

6.2. Procedure Arguments

6.3. The FUNCTION

6.3.1. Referencing a Function

6.3.2. Statement Functions

6.3.3. Examples of Statement Functions

6.3.4. Built-in Functions

6.3.5. Note on MENO, MINI, AMINO, MAXO, MAX1, AMAXO, AMAX2

6.3.6. Note on MOD, AMOD Function

6.3.7. Built-in Typeless Functions AND, OR, LOC, COMPL, BOOL

6.3.8. External and Internal Functions

6.3.9. Note on SIN, DSIN, CSIN

6 . 3 . 10 . Subprograms

6.3.10.1. External Subprogram-General

6.3.10.2. Function Subprograms-External

6.3.10.3. RETURN

6.3.10.4. Examples of Function Subprograms

6.4. Subroutine Subprogram- External

6.5. ABNORMAL Functions

6.6. EXTERNAL Statement

6.7. Errors to be Avoided When Using Subprograms

6.8. Exercises

Page 5

7. SPECIFICATION STATEMENTS

7.1. General

7.2. DIMENSION Statement

7.3. EQUIVALENCE Statement

7.4. COMMON Statement
7.4- 1. General

7.^.2. COMMON Block Size Rule
7.4.3. COMMON Used with EQUIVALENCE
7.4.4- Some Uses of COMMON

7.5. DATA Statement

7.6. Exercises

8. CENSUS LIBRARY FUNCTIONS

8.1. LPM (x)

•m

8.2. J (NAME,n)

8.3. IXTRC. (NAME,n)

8.4. LS (NAME,n)

8.7. LSUB (NA,NB)

8.8. LAND (NA,NB)

8.9. LFX (NAME)

8.10. LXF (NAME)

8.11. LFB (NAME)

8.12. LXB (NAME)

8.13. LBF (NBIN,NFILL)

8.14. LBX (NBIN,NFILL)

8.15. MSR (4Hxxxx)

Page 6

9. CENSUS LIBRARY SUBROUTINES

9.1. CHKDIV (\$n)

9.2. NOCHK

9.3. TYPE (n,nHMESSAGE)

9.6. CHANGE (u,n,nHMESSAGE, \$999)

9.7. INSRTf (NA,NB,n)

9.8. INSERT (NA,NARAY,n)

9.9. LDStt (NA,NB,n,NC,ND)

9.10. MOVEf (NA,n,NB,n)

9.11. LB2X (NBIN,NXS3,NFILL)

9.12. LB2F (NBIN,NFD,NFILL)

9.13. UNPK (INPUT, EDIT, CORE)
9. 14-. PACK (CORE, EDIT, OUTPUT)

9.15. SORT (LFILE,LPAR) - An Internal Sort

9.16. EX: A FORTRAN Input /Output Subroutine

9.17. Exercises

10. FOLION

10.1. LION Formats

10.2. FOLION

10.2.1. Introduction
10.2.1.1. File Labels

10.2.1.1.1. IIIA Labels

10.2.1.1.2. IIA Labels

10.2.2. Output Subroutine

10.2.2.1. Open Output File

10.2.2.2. Write Output File

10.2.2.3. Close Output Reel

10.2.2.4. Close Output File

Page 7

10.2.3. Input Subroutine

10.2.3.1. Open Input File

10.2.3.3. Close Input Reel
10.2.3.4-. Close Input File
10.2.3.5. Note on IIIA End-of-Reel Exit
10.2.4-. File Control Errors

10.2.5. A Coded Example

10.2.6. FORTRAN I/O Equipment Configuration

10.3. Exercises

11. GENERAL INFORMATION

11.1. Planning a HSP Output Table

11.2. Data Record Layouts

Creating Test Decks

Tape Blanking and Storage

Schedule Cards

Priority Card (PTY)

Facility Description Card (FAC)

Table Length Assignment Card (TAL)

Transfer Card (TRN)

Subroutine Card (SUB)

Parameter Cards (PMn)

11.6. Submission of Programs

General Instructions and Forms Required

11.7. Programer Responsibilities

11.8. Exercise

12. ASSEMBLY, CORRECTING, AND DEBUGGING

12.1. Assembly Control Cards

12.1.1. The START Card

12.1.2. The MAP Card

12.1.3. The FOR Card
12.1. 4-. The STOP Card

12.1.5. Examples of Control Cards

12.2. Program Corrections

12.3. FORTRAN Debugging

11.

3.

11

4.

11

5.

11

5.

1.

11

5.

2.

11

5.

3.

11

5.

4- •

11

5.

5.

11

5.

6.

Page 8

13. THE TAPE SORT

13.1. Using FORTRAN Generated Subprograms as Own Coding to the 1107 Sort-Merge

13.1.1. Concept of "OWN CODING".

13.1.2. Coding the OCFP and OCLP Subprograms

13.1.3. Entrances to Your Own Coding from the S/M

13.1. 4. Returns from Your Own Coding to the S/M

13.1.5. I/O Statement Within the Own Coding Subroutines

13.1.6. Communication Between OCFP and OCLP Subprograms

13.2. Scheduling for SORT

13.2.1. PTY Card

13.2.2. FAC Card

13.2.3. TAL Card

13.2.4. SUB Card

13.2.5. PMO Card

13.2.6. FM1 Card

13.2.7. PM 3,4,5 Cards

13.2.8. PM 6,7,8 Cards

13.2.9. Example of SORT Schedule Cards

13.3. Determination of CORE, DRUM and Tape Requirements for a SORT

13.4. Information Relative to the Straight Merge Only

13.5. Significant Console Messages

13.6. Notes on SORT/MERGE

14. SERVICE PROGRAMS

14.1. CENSER

14.2. CKSUM

14.3. SELTPR

14.4. AUTOCP

14.5. BTP

14.6. TCOPY

14.7. CTSIM

14.8. EDTCPY

14.9. CARTAP

14.10. DATACO

14.11. COPIER

Page 9

14.12.

RUTT

14.13.

UTT

14.14.

RUT702

14.15.

UTT4C

14.16.

MICRO

14.17.

RUTA19

14.18.

SALVAG

14.19.

2 to 3

14.20.

4C to 4C

14.21.

TP4C

14.22.

SUTT1

14.23.

PSTRIP

xl\. • (LL\. »

FOIST

14.25.

SR2F0L

14.26.

MDMIC

14.27.

RUTMDS

14. 28 .

IMAGER-TWOPAS

14.29.

EXERCISES

15. DECISION TABLES

15.1. Limited- Entry Decision Tables

15.2. Extended- Entry Decision Tables

15.3. Mixed-Entry Tables

15.4. Determining Maximum Table Size

15.5. A Method of Eliminating Irrelevant Tests

15.6. Bifurcated Table Arrangement

15.7. The ELSE Rule

Page 10

15. 8. Sequence Control Definitions

15.9. Examples of Decision Tables

15.10. Machine Processing of Decision Tables

15.11. TAB^IX: A Decision Table Preprocessor for the UNIVAC 1107
FORTRAN IV Compiler

16. PROGRAMING TECHNIQUES AND TIPS

16.1. FORTRAN: Externally Expandable Arrays Using Named COMMON

16.2. Compiling Large FORTRAN Programs

16.3. Defining Subroutine Formal Arguments
16.4-. Multiply /Divide Sequence

16.5- Real to Integer Conversion

16.6. Integer to Double Precision Function

16.7. Table Look-up Techniques

16.8. A Subroutine for Sorting Words in an Array

16.9. A Random Number Generator Routine

16.10. A Subroutine to Create a Check Digit

16.11. Method Used to Create Check Digit

16.12. A Subroutine to Convert Milliseconds to Hours, Minutes, and
Seconds in XS3

16.13. ZERO Subroutine

16.14-. Permissible Calls Using Programer's Subroutine ZERO

16.15. Sequence Checking

16.16. SEARCH: Programer's Subroutine for Binary Search

16.17. DRUM USE

17. PROGRAM EXAMPLES

17.1. General

17.2. "PAYROLL" Specifications

Page 11

17.3. "PROBABILITY of Purchasing an Automobile" Specifications

17. U. SORT with Option Coding

17.5. Specifications for Marriage Table 7A

18. FORTRAN V

18.1. INCLUDE

18.2. DELETE

18.3. EDIT

18.4. INPUT/OUTPUT END CLAUSE

18.5. INPUT/OUTPUT ERR CLAUSE

18.6. INPUT/OUTPUT STATUS WORD INSTAT FUNCTION

18.7. ERROR WALK BACK

18.8. EXTERNAL SUBPROGRAM

18.9. MULTIPLE ENTRY POINTS

18.10. AUTOMATIC TYPING

18.11. FLD FUNCTION

18.12. Define

18.13. Mixed Type Arithmetic

18. 1^. 1108 Double Precision Hardware

18.15. Parameter Variables

18.16. Data in Type and Dimension Statement

18.17. Implicit

18.18. Namelist Input/Output

18.19. Format Scan Pointer T

18.20. G Editing Code

18.22. Free Format Input/Output

Page 12

18.23. Mass Storage Files
18.24.. Encode/Decode

18.25. Optimization

18.26. Master Space Comment

18.27. Ru Format Code — Right- Justified Alphanumeric

18.28. Substitution for uH

18.29. Compiler Statement

18.30. Math- Pack and Stat-Pack

19. REFERENCE INFORMATION

19.1. Source Program Ordering

19.2. Limitations

19.3. Octal-Decimal Integer Conversion Table
19. 4-. 1107 Operator Termination Codes

19.5. Error Codes

19.5.1. LION Error Codes That Indicate Equipment Malfunction

19.5.2. LION Error Codes

19.5.3. Job Request Error Codes

19.5.5. EXEC I/O Error Messages

19.5.6. Termination Codes

19.5.7. Sort Error Codes

19.5.8. ELF Error Codes

19.5.9. FILE Control Errors

19.6. Channel Assignments

19.6.1. CENSUS 1107 Channel Assignments — 1107A-B

19.6.2. CENSUS 1108 Channel Assignments — 1108C

19.6.3. CENSUS 1108 Channel Assignments — 1108D

19.7. UNIVAG 1107 Standard Code Translation

19.8. BCD, Excess-Three Codes

19.9. Table of Powers of 2

19.10. Capacity of Tapes Written With FOLION

19.11. Standards for Operation and Use of UNIVAC 1107 System

19.12. Most Used Boards and Loops for OFFLINE HSP

Page 13

19.13. HSP Non- Printing Characters

19.14-. Amount of Space per Page

19.15. Data Processing Equipment at the Bureau of the Census

19.16. Character Set for Information Interchange

19.17. Flowchart Symbols

19.18. Names to be Avoided for External Subroutines

19.19. LION Formats

19.20. FILE Control Table - Output

19.21. FILE Control Table - Input

Page 14

TABLE OF

20.

20.1.

20.2.

20.3.

20.4.

20.5.

20.6.

20.7.

20.8.

20.9.

20.10.

20.11.

20.11.1

20.11.2

20.11.3

20.11.4

20.11.5

20.11.6

20.11.7

20.11.8

20.11.9

20.11.10

20.11.11

20.11.12

20.11.13

20.11.14

20.11.15

20.12.

20.12.1.

20.12.2.

20.13.
21.

CONTENTS (Continued)

SLEUTH II

Introduction to SLEUTH II

Instruction Word Format

The Label Field

The Operation Field

The Operand Field

Continuation

Termination

Data Word Generation

Expressions

Operators

SLEUTH II Assembler Directives

EQU

RES

FORM

END

LIT

INFO

DO

PROC

NAME

GO

FUNC

WRD

CHAR

LIST, UNLIST

EQUF

Communication Between FORTRAN and SLEUTH II
Through Use of COMMON Areas
Through Use of ARGUMENT Lists

APPENDIX C. INSTRUCTION REPERTOIRE

GLOSSARY
BIBLIOGRAPHY

1. INTRODUCTION

March 1970 CENFOR 1- 1

1.1. Ever Wonder How A Computer Works?

In the barely 25 years that computers have had an Impact on our
society, they have brought about a basic transformation in the
way man lives. This ever increasing impact is evident in the areas
of banking and business, science and medicine, education and
entertainment. In education alone, there has been a change in the
philosophy of teaching as well as a change in the content of what
today's children are learning. Behold the parents staring with
uncomfortable lack of familiarity at their third-grader's
arithmetic homework.

This era of speeds and volumes beyond human understanding, of
superlatives and extremes is created in part by the availability
of computers. Without computers, however, there would be no
possible way to keep up with processing, analyzing, and producing
the information necessary to man's life. Indeed, the role of the
steam engine in the industrial revolution finds its contemporary
counterpart in the computer and the "information explosion."
Just as machines were designed to reduce the workload of many
people or animals, the need for automation of intellectual work
came with the development of science and the increased amount of
knowledge man must deal with every day. Thus the computer must be
considered as a universal information-processing machine.

1.1.1. Hardware vs. Software

A computer consists of both a collection of electronic parts
that is called hardware and a set of written procedures for
controlling the hardware called software. In terms of hardware,
a computer consists of input and output devices, arithmetic and
control circuits, and a memory. The software is the program of
instructions that puts the system to work and is written by a
programer who analyzes the task at hand. Thus, any calculation
that can be performed by any machine can be performed by a
computer if there Is a program directing it.

Confronted with what may appear to be the frenzied motion of
input-output devices and the blinking of console lights, it is
not hard to view the programer as the witch doctor of a black art.
In fact, anyone who has ever written a recipe or a set of
directions to perform a task or planned a route of travel has,
to some extent, written a computer-like program.

1.1.2. Input Devices

The computer accepts information from its environment through
its input devices; it combines this information, directed by the
rules of the program stored in its memory, with other information
also stored in its memory, and sends information back to its
environment through its output devices. The information may be
punched into cards or tape; it may be recorded magnetically

CENFOR 1- 2 March 1970

on tapes, keyboards, disks, drums, or cards; it may be speech in
the form of electrical pulses transmitted across telephone or
telegraph lines, or it may appear on a TV-like picture tube. In
each case, there will be a device specifically designed to translate
the information from the incoming mode to the language of the
computer or from the machine language to a mode preferred by man.

The human brain performs a similar function by accepting
information through its senses, combining it with information
stored in the memory and translating it to an appropriate action,
speech, etc., which returns to man's environment. However,
computers perform operations a million to a billion times faster
than humans and this increase in speed means a greater capacity
to manipulate information on a large-scale basis.

1.1.3. Computer Language

If a computer is to be used, it must obviously be able to
communicate with the outside world. For human- to-computer
communication the colorful, expressive language of human- to -human
communication is not necessary; it is not even desirable. Thus,
although there are numerous "programing languages" (e.g. COBOL,
FORTRAN) , they are a simplification of the language one would use
to describe a task to a friend. There is even a greater simplifi-
cation in the machine language by which the computer operates
internally.

1.1.4, Units of Information

The basic unit of information with which these machines work is
the binary digit, so-called "bit." In binary notation, only two
symbols are used, 1 and 0. This system of representation is
particularly convenient for the recording and processing of
information in electronic devices because they most easily operate
in only two different ways. For instance, a wire is either con-
ducting current or it is not; a switch may be open or it may be
closed. Therefore, one of the binary symbols can be equated with
the electronic condition "switch open," or "no current on the
wire," while the other symbol can be equated with the opposite
electronic condition "switch closed" or "current on the wire."
By grouping bits in some agreed upon unit, meanings can be assigned
to the various states that the unit (called a register here) may
assume. For example, if a unit consisting of five elements is
chosen, each element capable of being in one of two states (repre-
sented by 1 and 0) then there are a total of 32 states.

The register can assume any one of the combinations from 00000
to 11111. Specific and unique meanings can now be assigned to
each of these states; perhaps the familiar decimal numbers to 31
for example :

March 1970 CENFOR 1- 3

Binary Decimal

Representation Equivalent

00000

00001 1

00010 2

00011 3

and so forth. Perhaps the various combinations might be designated
as the 26 letters of the alphabet with six combinations left over
for punctuation symbols.

What these combinations of l's and 0's will represent is agreed
upon before the equipment is ever designed. Thus the language
the computer uses internally — as well as the kinds of input-output
modes to be used by the programer — is determined by the individuals
designing and building the machine.

1.1.5. Output Devices

Information is most frequently prepared in such a way as to
facilitate the translation between the outside environment and
the computer. It may be produced by the computer itself through
the output devices, or it may be by some auxiliary equipment
such as a keypunch. Thus, a hole punched into a punched card can
be interpreted as a 1, and the fact that there is no hole inter-
preted as a 0. A magnetic tape device will interpret a
magnetically recorded spot on the tape as a 1, the absence of a
magnetic spot as a 0.

Not only does one have the ability to represent information in
binary notation, but it is also possible to perform arithmetic
operations upon it, following a few simple rules. It turns out
that the calculations one wants to do in a computer can be done
operation of computers.

Thus it is by converting information to this binary representation,
storing it and operating on it with elements that can change state
in a few millionths or billionths of a second, and finally con-
verting it to a selected output mode, that the computer can
process and produce information that affects all phases of man's
life.

CENFOR 1-4

March 1970

1.2 INTRODUCTION TO FORTRAN PROGRAMING

The process of writing a program should consist of a number of basic
steps.

(1) First, the problem should- be analyzed carefully to determine
exactly what information is wanted. Then it must be determined
which part of the known information must be used to resolve
the problem. For instance, if the problem is to find the area
of a triangle, one must know (or be able to find) the base and
the height of that triangle.

(2) After the problem has been analyzed generally, the specific
sequential steps must be determined. The most widely accepted
method for planning the sequence of operations in a grogram is
through flowcharting, a picture of the flow of the action of
the program. In any problem that is even moderately complex,
the interrelationships within it are difficult to keep clearly
in mind without some visual representation. A flowchart pro-
vides this assistance.

A flowchart is made up of a set of boxes, the shapes of which
indicate the nature of the operations described in the boxes,
along with connecting lines that show the "flow of control"
between various operations.

For our purposes here, the notation, which is quite simple,
contains the following symbols :

A rectanrle indicates any operation
except a decision.

A diamond indicates a decision. If
the aecision is YES or TRUE, the
action follows the line on the right.
If the decision is NO or FAISE, the
action follows the aownward line.

An oval indicates the beginning, ending,
or interruption point in a program.

A circle indicates the connection
between two points in a flowchart.

The booklet "UNIVAC FLOWCHART SYMBOLS" describes the standards
for flowchart symbols published in 1965 by the American Standards
Association. Employment of the standard symbols is suggested to
stay in tune with the computer industry. Booklets and templates
are available in The Training Branch. Refer to 19.17. for a more
complete aescription of the standard svmbols.

March 1970

CENFOR 1- 5

The following is a flowchart for solving the quadratic
equation. As in ordinary arithmetic, division by zero
will produce an error, so any input which could cause
such an error should be eliminated prior to its com-
putation.

Establish
Coefficients
A, B, and Cj

ROOT = -bWb 2 - 4AC

2A

ROOT 9 = -B- ^B 2 - 4AC

Flowcharts should always be written and read from left to
right and from top to bottom.

Another method for schematically representing the flow of the
control is the use of decision logic tables, tables which show
the various paths which may be taken after a decision is made.
Refer to chapter 15 "DECISION TABLES".

Decision Logic Table Example :

START
A. 4

Y N N
Y N

ESTABLISH A,B,C

Root 1 = ( - B + \| B 2 -~4AC) /2A
Root2=(-B- p 2 " - 4AC") /2A
PRINT

X

X
X
X

RETURN
STOP

X

X X

CENFOR 1- 6 M^ ch 1970

While writing the flowchart or decision logic table, it must be
remembered that a program must be written to consider every poss-
ible case. If a path is set if A<0 and one is set if A>0, but
if A = 0, then the computer will not know what to do. No poss-
ible combination of parameter or eventualities can be omitted
from the analysis, for the computer must be "told" every-
thing! It is simply a mechanical and electronic device
and "knows" nothing.

Whichever tool for planning the sequence of operations is used,
the important point is that some considerable effort should be
expended in planning the operation in -order that it may enjoy
a favorable prospect for success. It is most wastefull of
programer effort and computer time for an operation to hang
up for some error and require debugging. The use of the flow
chart or the decision logic table helps insure that all poss-
ibilities are considered. In addition, they help point up
similarities which can be handled in a generalized manner
such as by the use of loops or subroutines. Generalized
handling conserves effort and insures some freedom from error.

Another means of insuring the success of a program is
through the use of modular Programing. A large program
may be logically segmented Into many small subprograms, each
with its own duties. It is much easier and quicker to
assemble and to debug these sections of logic than to
assemble and debug one immense program. When all the parts
have been completed, tha main program becomes merely a
collection of references to Its subprograms. Another feature
of subprograms is that whenever a useful routine has been
developed, it may be placed in the Library, and it may then
be referenced by any program. If one program for sorting
a list of words has already been written, it is much more
economical to reference that program every time a sort is
needed, rather than recoding the entire procedure.

Yet another means for effective programing is for programer s
to work in pairs or at least to communicate with one another
in considerable detail. This implies the use of a common
language and extensive documentation. The development of a
program and its actual coding is most successfully achieved
by the exchange of ideas and by help in checking logic and
in the actual usage and coding of the programing language.
The programing task is often much too difficult and complex
to entrust to one person.

These three procedures (l) generalized programing, (2) modular
programing, and (3) team programing are the basis for writing
error-free programs.

(3) After an effective flowchart or decision logic table has been
drawn, it is quite simple to follow its steps to create the
sequence of statements, the coding , to be sent to the computer.
But it must be remembered that the actual program statements
themselves must be written with precision of execution, for a

March 1970 CENFOR 1- 7

single error in a single statement invalidates the entire
program. These coded statements, printed on a FORTRAN
coding sheet are then sent to be punched, one statement
per card. You need not worry about the program again
until the output returns to you, but meanwhile these
punched cards are sent through a process which puts your
coding on a tape. The computer, if fed the tape and its
compiler, translates your coding into machine language, the
language which the computer can interpret. It follows
your sequence of instructions, using the data which must be
supplied and returns the answers which you requested. At
this time, hopefully, you have finished your program; but'
more realistically you must review what you have coded,
make corrections, and resubmit your program.

(4) Even correct results printed by the computer do not always
constitute a final answer to the problem. The user of the
results must finally interpret the results to see what they
mean in terms of the combinations of goals that the proposed
program must satisfy. The customer often must use a trial
and error approach to his problem.

(5) When the program works successfully, or during some
other phase of writing the program, comments explaining
how and why each step has occurred should be added. This
work at some later time, and for other people to under-
stand what you have done. The major reasons for requiring
documentation are: (l) in case the original programer

is unable to complete the job, (2) so that future mod-
ifications may be added to the program, and (3) to make
corrections if latent errors are uncovered during pro-
duction processing. As much as is possible of the
documentation should be done concurrently with the pre-
paration of the program. This is especially true if
the programer is working on different stages of one job,
or on programs for more than one job.

Remember to do each step of programing thoroughly and
carefully :

(1) PLANNING

(2) FLOWCHARTING OR WRITING DECISION LOGIC TABLES

(3) CODING
U) DEBUGGING

(5) DOCUMENTATION

CENFOR 1-8

March 1970

1.3.

INTERNAL REPRESENTATION

The memory of a computer contains a large number of boxes, the
storage locations , each having a distinct name, the address .
Information may be put into each location, but only one word of
information may be there at any time. When new information is
placed in a location, the old information is destroyed. When
the computer is told to multiply two numbers, it actually is told
to multiply the contents of two addresses. It finds out what is in
the first address, and copies this into the Arithmetic Unit. Then
it multiplies what is in the second address by the first quantity,
and then this result is placed into the specified address in
memory.

This process takes place automatically when you ask to have two
numbers multiplied, but you must remember not to destroy the
contents of one address by placing something else in it unless
the first number is no longer needed. If you want to increment J
by one, effective coding would be J=J+1, but now the old J has been
destroyed. Only the new J may be referenced.

The compiler translates each instruction into numerical form, and
this number is stored, along with the particular variables or
constants to be acted upon, in a storage location with an address.
being performed. When one instruction is completed, the current
address register is incremented by one, and the computer moves to
the instruction contained in this new address.

After a program has run, it is often useful to obtain a memory
dump , that is, a printing out of the contents of the computer's
memory for that particular program. This printout is in the form
of numbers and shows the contents of every word of the program-,
it thereby displays the machine-language instructions as well
as the data. A dump is often quite useful in uncovering the
exact location of an error. The system will automatically give
an octal dump for most errors. One can take advantage of this
fact and obtain a dump by creating an error condition if a dump
is desired.

1.3.1.

WORDS

Within the computer bits are grouped into thirty-six bit sections
called words. One word is treated by the computer circuits as
a unit and is transferred as such. If the word contains integer
binary arithmetic data, the first bit of the word is a sign bit.
A "0" indicates a positive number and a "1" indicates a negative
number.

Bit

March 1970 CENFOR 1- 9

It is the words which have a name or address, and it is impossible to
reference individual bits of the word except with one of the logical
functions. Refer to 1.4.9.

Since binary numbers are rather hard to read and interpret, these
numbers are usually converted to octal before such printouts as a
dump. Therefore when the individual words are shown in a dump, there
are twelve digits in length, three binary bits for each octal digit.

Furthermore these octal digits are difficult for the layman to
comprehend, so another conversion must take place to print characters
in the conventional decimal numbers and ordinary alphabetic char-
acters. It must be noted that six bits are required to form one
print character. There is room for six characters in each 36-bit
word. It takes two octal digits to form one print character. There
are several character sets in the computer world. Some require a
different number of bits for each character. Print characters
are often referred to as Hollerith characters (named after a former
Census employee who wedded punch cards and tabulating equipment in
the 1890 Census). Regardless of the character set, binary values
must be converted to Hollerith characters before meaningful printing

may be done. Service programs may be requested, or subroutines
may be called within the user's program to accomplish conversion.

To print "off-line" (to use a printer which is not physically connected
to the computer) , the data must first be converted to the language
which the printer will recognize. The present UNI VAC "off-line"
printers require XS3 codes for printing. These printers also require
special tapes (IIA) which are written with 120 words to a block. Each
line that is printed uses 20 words. The format for a IIA tape is
referred to as "Census compatible". The first character in a print
record may be one of several symbols to control line spacing and
printing in conjunction with a paper loop and a wired board.
Standard boards and loops are available. In the event that special
needs arise, a High Speed Printer manual is available for reference.
Refer to 19.7. "UNI VAC 1107 Standard Code Translation" for a list
of specific character codes. Refer to 19.12. for a list of boards
and loops.

To print "on-line" (to use a printer controlled by the computer),
Fieldata characters must be present. Fieldata characters are the
normal 1107 High Speed Printer characters. This printer uses 128
characters for a print line; the first character is used as a print
control character. An additional 4 characters are supplied by
FORTRAN to meet image control requirements of the system. There-
fore, records created by formatted FORTRAN "WRITE" statements for
later printing consist of 22 words. The programer prepares a tape
instead of using the printer directly and then requests a service
routine to print from the tape. See 14.. 1. CENSER.

If a large volume of data is to be printed, it is recommended that
IIIA tapes be generated during the processing of the program. The
IIIA tapes have a higher density and are longer than IIA tapes. They
hold about 8 to 10 times more data than IIA tapes. However, before

CENFOR 1-10 March 1970

printing can be done, a service routine must be called to either
copy to HA tapes or print "on-line". See 14.. 1. CENSER.

1.4.. NUMBER SYSTEMS

1.4.1. BINARY

For computer and automation purposes, the decimal system is
difficult to use. Therefore, most computers operate using a
binary or a binary coded system of number notation. To
appreciate why this is so, one need only to think of some
common electrical devices. Electricity and electrical imple-
ments are well suited to representing information by elements
being in one of two possible states. A light can be on or off;
a tube can be fully conducting or not conducting; a spot can be
magnetized in one direction or another; etc. All these things
may be referred to as bi-stable elements; that is they may be
in one of two possible states.

For example, if we think of an ordinary light bulb, we should
not have too much difficulty in reaching agreement that the bulb
is either lighted or not lighted. Neither should we have trouble
if we use the terms "on," or "off". These two states, "on"
or "off", could be called, with prior agreement, "true" or "false",
"yes" or "no", or "one" or "zero." Here then, by agreement, are
two numbers or digits - f l" and "0", represented electrically.
Combinations of these two digits, and only these two digits, can
be used to represent numbers as we know them.

For instance, two light bulbs could represent any decimal number
between zero and three:

BULBS NUMBER REPRESENTED

Off Off = Zero

Off On = One

On Off = Two

On On = Three

Continuing in this manner, given an infinite number of light bulbs,
we can represent an infinite number.

If in the diagram above, we use "0" and "1" rather than "off"
and "on", it would appear as follows:

00

= zero

01

= one

10

= two

11

= three

March 1970 CENFOR 1-11

Continuing, using one more place:

100

=

Four

101

=

Five

110

=

Six

111

=

Seven

Obviously, this is the binary number system, which is a system
using only two symbols, and 1.

To count in binary system follow the two rules mentioned below.

= Zero

1 = One (the next allowable symbol - Rule l)

10 = Two (since no further allowable symbols exist

after "1," change back to the first symbol,
step one column left and advance that
symbol - an implied "0." - Rule 2)

11 = Three

in the next position)
Etc.

Binary is a base two number system. (Binary digits are usually
called "bits."

(The base or radix of a number may be defined as the total

number of non-redundant symbols allowable in the system.

Binary has a "0" and a "1," therefore, base two. Decimal - base
ten. )

Since we will be using more than one system, we must distinguish
between numbers of different systems. The distinction will be
made by writing the number followed by the base written as a
subscript, e.g.

100, n = one hundred
100 2 = four

1.4-. 2. OCTAL

It is easier for the computer to use the binary system, but
it is not so easy for us.

Suppose we have the following binary number:

001010001000010011100101110111111001

How can you express this number? It would be impractical to
examine the 36 binary digits of the number to determine its value.
A simplified means of interpreting and stating this binary number
is needed.

CENFOR 1-12 March 1970

If we separate the binary number into groups of 3 bits each,
progressing left and right from the "binal point, and then
express the value of each group of 3 bits by one digit we
would have :

001 010 001 000 010 011 100 101 110 111 111 001
121023456771

Thus we have decreased the difficulty of expressing the binary
number.

Note that in three binary digits, any value between zero and seven
can be represented.

000 =

001 = 1

010 = 2

011 = 3

100 = U

101 = 5

110 = 6

111 = 7

A number system which uses eight symbols, through 7, is the
octal system (Base eight).

The digits "8" and "9" never appear in octal.

Octal therefore, is used as a "shorthand" for binary.

Examples:

Binary - 010 101 100 110 110
Octal -254-66

010101100110110 2 = 254i>6 g

Binary - 100 000 000 000 000
Octal - U

100000000000000

2 = 40000g

Binary - 001 101 111 000.100
Octal - 1 5 7 0.4

001101111000. 100 2 = 1570. 4 g

The section which follows contains a brief review of some of
the main points covered thus far, and then develops in detail
methods for converting numbers from one system to another.

(- ;; -The term, "Binal Point," in the Binary System corresponds to the
term, "Decimal Point," in the Decimal System.)

March 1970

CENFOR 1-13

1.4.3. NUMBER CONVERSION

The 1107 computer uses the binary number system in all internal
manipulations of numbers instead of the more familiar decimal
system.

Of interest to our study are the methods of converting numbers
from decimal to octal and binary form, and vice versa.

It is well known that the decimal system uses ten symbols to
express numbers. These are the digits 0, 1, 2, 3, 4, 5, 6, 7,
8 and 9. Only two symbols are used in the binary, and eight
in the octal system to represent all quantities. These are
and 1 in the binary, and 0, 1, 2, 3, 4, 5, 6 and 7 in the octal
system.

Counting is started in the binary system in the same way as
in the decimal system with "0" for zero, and "1" for one. But
at two in the binary system, it is found that there are no
more symbols. Thus, it is necessary to do the same thing at
two in the binary system that is done at ten in the decimal
system, that is, place a "1" in the first position to the
left and start again with "0" in the original position. There-
fore, "10" in the binary system is equivalent to "2" in the
decimal system. Counting is continued in an analogous manner
with a carry to the next place every time a two is reached
instead of every time a ten is reached.

In the octal system counting is done in a similar fashion.
The following table demonstrates how counting starts and how
a few numbers are denoted in the decimal, octal, and binary
systems :

DECIMAL

OCTAL

BINARY

or

000

1

1

1

or

001

2

2

10

or

010

3

3

11

or

011

4

4

100

or

100

5

5

101

or

101

6

6

110

or

110

7

7

111

or

111

8

10

1000

or

001000

9

11

1001

or

001001

10

12

1010

or

001010

11

13

1011

or

001011

12

14

1100

or

001100

13

15

1101

or

001101

14

16

1110

or

001110

15

17

1111

or

001111

16

20

10000

or

010000

24

30

11000

or

011000

64

100

1000000

or

001000000

100

144

1100100

or

001100100

120

170

1111000

or

001111000

CENFOR 1-14

March 1970

The columns in the binary and octal systems do not have the

meaning of units, tens, hundreds, thousands , as in the

decimal system. Instead, they signify units, two ' s, four ' s ,
eight's, sixteen' s, - - - -, in the binary, and units, eight's,
sixty-four's, five hundred- twelve ' s - - - -, in the octal
system.

The bases of the decimal, octal, and binary systems are ten,
eight, and two respectively. When the base of a number is not
apparent from the context, it will be specified by a decimal
subscript, e.g. 13n~ = 15 rt = 1101.

13 10 = 15 8 =

~r

1.4. 4. ARITHMETIC IN OTHER BASES

The algorithms for arithmetic operations are all based on
properties of positional notation that are independent of the
particular base in use. However, different tables apply for
the additions and multiplications of digit pairs that occur
in the process. Consequently, addition and multiplication
tables must be reconstructed for each base concerned, and these
may be used with the familiar rules for the arithmetic algorithms.

The following are addition and multiplication tables for binary
and octal number systems. Where two digits occur in an entry,
the leftmost is the carry digit.

1

1

1 10

Binary

Multiplication
1

1

2

3

4

5

6

7

1

2

3

4

5

6

7

1

1

2

3

4

5

6

7

10

2

2

3

4

5

6

7

10

11

3

3

4

5

6

7

10

11

12

4

4

5

6

7

10

11

12

13

5

5

6

7

10

11

12

13

14

6

6

7

10

11

12

13

14

15

7

7

!

10

11

12

13

14

15

16

Octal

1

2 3 4 5 6 7

1

1

2 3 4 5 6 7

2

2

4 6 10 12 14 16

3

3

6 11 14 17 22 25

4

4

10 14 20 24 30 34

5

5

12 17 24 31 36 43

6

6

14 22 30 36 44 52

7

7 16 25 34 43 52 61

■■■

March 1970

CENFOR 1-15

The following example shows the use of the addition tables and
the addition algorithm to compute, in decimal, octal, and
binary, the number of items in two dozen.

DECIMAL

12
+12

24

OCTAL

14.

30

BINARY

1100
+1100
11000

In a similar manner, the following example shows the use of
multiplication to compute the number of items in a gross.

DECIMAL

12
xl2

24
12

OCTAL

14

xM

60

Ik.
220

BINARY

1100
xllOO
0000
0000
1100
1100
10010000

Positional Notation

In the decimal system, a digit in a specific position within a number
represents that numeric digit times 10 raised to a power determined by
the number of positions away from the right most digit. The sum of
these products represents the actual number. For instance, the decimal
number 654321 can be considered to be the sum of the following products
using the above rule:

6
5
4
3
2
1

654321 decimal

Likewise, in the octal system the position of a digit within a number
represents that numeric digit times 8 raised to a power determined by
position. Kor example, the octal number 35276 can be considered to be
the sum of the products using the base 8.

x H)5 = 6 x

100000

or 600000

x 10^ = 5 x

10000

50000

x 103 = u x

1000

4000

x 10 2 - 3 x

100

300

x 10 1 = 2 x

10

20

x 10° = 1 x

1

1

3x8^

= 3 x

4096

or

12288

5 x 83

- 5 x

512

2560

2 x 8 2

= 2 x

64

128

7 x 8 1

= 7 x

8

56

6x8°

= 6 x

1

6

15038 decimal

Note that a number raised to a power of equals 1 in any base.
In the binary system, each "1" bit represents a value whirh can be
expressed as 2 to the power of the bit position. See 19. 9. for
"Table of Powers of Two".

CENFOR 1-16 March 1970

1.4.5. CONVERSION

It is impractical to interrogate the 36 binary digits of a
number to determine its value. A simplified means of
interpreting and stating this binary number is found in the
octal number system.

1.^.5.1 BINARY TO OCTAL

To convert a binary number to octal, merely group the binary
digits in three's, progressing left and right from the binal
point. Then represent each group of 3 binary digits by 1
octal digit.

For example : 010001000111000000000010011100101110

Group the digits in three's:

010 001 000 111 000 000 000 010 011 100 101 110

Now express the value of each group of three binary digits by
one octal digit:

010 001 000 111 000 000 000 010 011 100 101 110
210700023456

u a

The maximum value of three binary bits, "111," is seven, and 7

is the highest single digit in the octal system used to repre-
sent the binary. The digits "8" and "9" never appear.

Binary numbers containing fractions: 100011001.101 are
converted in a similar manner:

100 011 001 . 101
Octal - 4 3 1 5

1.4.5.2. OCTAL TO BINARY

To convert from octal to binary reverse the procedure listed
above. Represented each octal digit by three bits having the
same value as the octal digit.

For example : Convert the following octal number to binary : 543210

5 4 3 2 10
101 100 011 010 001 000 Ans. 1011000110 10001000

The reason for using octal should now be apparent. Octal is
a "shorthand" for binary, and is a simplified means of inter-
preting and expressing binary numbers. Conversion between octal
and binary is immediate and can be done by inspection.

March 1970

CENEOR 1-17

1.4.5.3. DECIMAL-OCTAL CONVERSION

Numbers can be converted from decimal to octal and vice versa
by hand by using the methods outlined below. As shown, an
octal number is converted to decimal by multiplying the most
significant digit, adding the next significant digit, and multi-
plying that sum by 8. The process is continued until the least
significant digit has been added to compute the decimal equiva-
lent. Decimal to octal requires that you divide the number by
eight and the remainder is the least significant octal digit.
The quotient is again divided by 8, and that remainder is
stored in the second least-significant place. This process
is repeated until the quotient is zero.

OCTAL to DECIMAL

1

1

1
x8

1A

12
x8

96

100

DECIMAL to OCTAL

12

8/ 100

1

8/ 12

8/— 1

R = U-

R = /,

R = 1

I

-^1 I U

1.4.5.4. BINARY-DECIMAL CONVERSION

To convert from decimal to binary, first convert to octal
as previously shown, then make a direct conversion to binary
by inspection. To convert from binary to decimal, reverse
the procedure, by converting first to octal, then to deci-
mal using the method previously discussed.

CENFOR 1-18

Marci. 1970

An alternate method of converting binary to decimal is to add
the values for all "1" bits. Each bit position represents a
value which can be expressed as 2 to the power of the bit position.
See 19.9. for "Table of Powers of 2".

1.4.5.5. Converting Fractions

Binary to Octal

Group the bits into trio 's starting from the binal point and proceed
to the right . Then evaluate each trio.

.1010111 2 = .101 Oil 100
= -534s

Octal to Binary

Each octal number is converted to its binary form.

.362g = Oil 100 010

Octal to Decimal

The digits are the numerators of a series of fractions whose denom-
inators are successive powers of 8. The sum of the fractions can
then be reduced to a decimal fraction. Decimal arithmetic is used.

.25258 = 2 + _i + _2_ + 5 = 1365 = .333
8 64 512 4096 4096
Decimal to Octal

Multiply the decimal fraction by 8. The successive "overflows"
beyond the extent of the original number form the octal fraction.
Example: Find the octal equivalent of .1415910

.14159

1.13272

.13272

1.06176

.06176
8

0.49408

.49408

3.95264

.95264

8

7.62112

1.4.5.6.

The overflows produce the octal fraction .11037. Note that a term-
inating decimal fraction may yield a nonterminating octal fraction
or vice versa.

Mixed Numbers

The integer part is treated separately from the fractional part of
the number and the results are combined.

,, u nQ „ CENFOR 1-19

March 197

t.6. SIGNED BINARY NUMBERS

A binary quantity carries a positive or negative value connotation
according to its representation in one's complement notation. The
leftmost bit of the quantity in one's complement notation is indi-
cative of the sign of the number represented. If the number repre-
sented is negative, the sign bit is one. A number negative in value
appears in the computer as the one ' s complement of its absolute
value. Thus, each zero in the representation of the absolute value
becomes a one, and each one becomes a zero. For example, the
representation of the positive decimal quantity 13 as a computer
word is:

000 000 000 000 000 000 000 000 000 000 001 101

The representation of the negative decimal quantity 13 is the one's
complement of this, or:

111 111 111 111 111 111 111 111 111 111 110 010

Note: The 36 bits of a computer word are grouped in threes as
above to promote ease of reading and converting to octal notation.

The octal representation of the positive decimal quantity 13 is:

000000000015
The octal representation of the negative decimal quantity 13 is:

777777777762

Any bits between the sign bit and the most significant bit of the
number represented are also indicative of the sign of the number.
Thus the sign bit is duplicated to the right until the most signifi-
cant bit appears the same as the sign bit. Note also that the most
significant bit of a quantity always differs from the sign bit.
This is less obvious when a number is represented in octal notation.

The quantity "zero" has a positive and a negative representation in
the computer, namely, in octal notation, 000000000000 or 777777777777.
However, it is not possible for the representation of "negative" zero,
77777777777, to be generated as the result of an arithmetic operation.
A "negative" zero generated in some other way, is treated as the
quantity zero in arithmetic operations.

In an n-bit register, no more than n-1 bits can represent the value
of a signed integer since at least one bit represents the sign.
Thus, the range of signed integers which can be represented in an
n-bit register is minus (2 n- l- l) to plus (2n~ -l).

Hence, the positive integers which can be represented in a 36-bit
register lies in the range of 1 to 2^-1, or as expressed in octal
notation

000000000001 through 377777777777

CENFOR 1-20

March 1970

The negative Integers which can appear in a 36-bit register lie in
the range -1 to -(2-1), or as expressed in octal notation

777777777776 through 400000000000

The range in decimal would be

from -34,359,738,367 through /34, 359, 738, 367

Examples of signed binary numbers (expressed in octal) are:

Octal Decimal Value

+100

-100

+1

000000000144

777777777633
000000000001
777777777776

-1

1.4.7. FLOATING POINT

The binary representation of a real number is sometimes referred
to as a floating point number because of the scaling which occurs
as the number is packed into the form shown below:

S
I
G
N

35

CHARACTERISTIC

34-

27

MANTISSA

26

Assumed Decimal Point

The characteristic (an 8-bit field) represents the scaling of the
number. A number as large as 255 can be contained in 8 bits. There
is a need to provide for negative characteristics, so half of
255 + 1 is 128. Characteristics may now range from -128 to +127.
Because there is no sign bit for the characteristic, the numbers
are biased by 128. Thus, all numbers of the characteristic become
positive. The number -128 now becomes 0; the number becomes 128;
and the number +127 becomes 255. Expressing this in octal: negative
characteristics range from 0-177, and positive characteristics range
from 200-377.

The mantissa is fractional and therefore is always less than 1.
The sign bit in bit 35 determines its sign. When scaling of an
integer takes place to create the mantissa, the number of places
necessary to move a number from right to left to place the most
significant bit at bit position 26 is subtracted from the number 155.

March 1970 CENFOR 1-21

Thus if the original number is 1, it would have to be moved 26
places to the left to read the assumed decimal point between
bit 27 and 26. Subtracting 26 from 155 gives 129. This in turn
becomes octal 201, the characteristic for this number. The octal
floating point number for 1 would then be this: 2014-00000000.
The octal floating point number for -1 would be 576377777777 since
a negative number is expressed as the complement of the positive
number.

Floating point is a solution to the problem of keeping track of
decimal points by representing every real number as a decimal fraction
between .1 and 1.0 multiplied by a power of 10. Thus:

-2
.0028 = .28 x 10

3
108.75 = .10875 x 10

In other words, the characteristic is the exponent and the mantissa
is the fraction.

CENFOR 1-22 March 1970

1.4.8. BINARY CODED DECIMAL CODES

The digital computer can be thought of as an assemblage of
two-state devices because it manipulates the one's and zero's
of the binary number system. People, on the other hand, are
more accustomed to decimal numbers, and for this reason it is
often desirable to build a- computing system which can be operated
in decimal.

To build a decimal computer with two-state devices, it is
necessary to encode the decimal digits with binary bits.
Four binary bits are needed. Although only 10 of the 16
permutations possible with the 4— bit decade will be used, all
are available.

The choice of code is obviously important. Desirable features
of the code are: Ease in performing arithmetic operation,
economy of storage space, error detection and correction, and
simplicity. Several possible codes are shown below.

DECIMAL 84-21 EXCESS 3

0000 0011

1 0001 0100

2 0010 0101

3 0011 0110
k 0100 0111

5 0101 1000

6 0110 1001

7 0111 0110

8 1000 1011

9 1001 1100

Four Bit Codes

The 8421 code is commonly referred to simply as binary-coded
decimal because the weights of the positions are the same as
in the binary number system. Arithmetic operations are easily
performed using the same basic method as in binary since the
number sequence is the same.

In the Excess-3 code, a decimal number D is represented by
the binary equivalent of the number IH-3. The Excess-3 code is
not a weighted code, but since it follows the same number sequence
as binary, it is useful in arithmetic operations. Addition is
facilitated since the need for a correction factor is easily
detected and easily implemented. Because it is self-complementing,
the Excess-3 code is also useful in subtraction.

March 1970 CENFOR 1-23

1.4-.9. Logical Operations

Certain operations which we refer to as logical, or Boolean,
allow bits to be extracted or changed depending upon corresponding
bits in another word (a mask). This allows us to set, clear, or
to switch bits. The "exclusive or" combination of binary digits
is when one of the digits, but not both, is one. It is found by
adding two bits and disregarding any carry to the next bit position.
The rules are as follows:

1

1

1

1

1

1

The logical sum, "inclusive or", is when either, or both, of the binary
digits is one. The truth table is as follows:

1

1

1

1

1

1

1

The logical product, "and" or "conjunction", is when both of the
binary digits are one. It is found by multiplying two bits. The
results of an "and" operation are as follows:

10 1
11
1

1.5 THE 1107 CENTRAL COMPUTER

The 1107 Central Computer is composed of the same basic elements as
other computers, namely control unit, arithmetic logic, storage,
and input/output elements.

5.1. The Control Portion

The control portion of the computer determines which operations
are to be executed and sets up the sequence of events that takes
place in the execution of a given instruction. The central
computer has a repertoire of 117 instructions, which can perform
such operations as transfers, arithmetic tests, and shifts.
The 1107 operates on single address logic. Each instruction
only specifies one operand even though other registers (such as
an accumulator and/or an index register) are involved in the
execution. This results in the programmer actually coding more
instructions than with a machine using two-address logic. One
feature of the 1107 that works to offset the number of instructions
required for a program is the large number of special registers
available. It has 16 arithmetic registers, 15 index registers,
(which are used to increment or decrement operand addresses), and
several other special registers.

CENFOR 1-24- March 1970

One feature of the 1107 that is valuable in cutting the time
it takes to execute instructions is the logical division of
core memory into two separate banks. Whenever the contents of a
core memory location are read, the contents are destroyed. Part
of the necessary cycle of operation is restoration of the loca-
tion that has been referenced. The reading and restoring of the
contents of a register comprises the read-restore cycle. Thus,
when an instruction is brought up for execution, one read-restore
cycle is required. If an operand is involved, another read-restore
cycle is required. If however, instructions are stored in one
bank of core and operands are stored in the other bank it becomes
possible to cut the cycle time in half. While a register in one
bank is being read, a register in the other bank can be restored.

1.5.2. The Computer Memory

The computer memory of the 1107 is of two types: Magnetic core
and thin film. The Census 1107 configuration has 65,536 core
storage registers. A feature of the 1107 is thin film memory.
This film memory consists of very thin spots of metallic oxide
that have been deposited on glass. Thin film has a much more
rapid rate of access than core memory. There are 128 thin film
registers in the 1107. These are the special registers already
mentioned. Their access speed is such that thin film may be
referenced six times during one reference to core memory.

1.5.3. The Arithmetic Section

The arithmetic section of the 1107 handles arithmetic and
comparative functions. The addition and subtraction functions
can be carried out in several ways. In addition to a straight
tract magnitude. Operations using partial words may also be
specified. For example, you can add any third of a word to the
contents of an Arithmetic Register, or subtract any sixth
of a word. This partial word facility is not limited to
arithmetic instructions. These are not the same as partial
word arithmetic instructions. For example, you can simultaneously
add or subtract all the thirds of a word to or from all the
thirds of an A register.

Along with the addition and subtraction are multiply and
divide instructions. Multiplication or division can specify
either 36 or 72 bit results. The number of A registers
available makes coding of complex arithmetic operation less
involved, since Intermediate results can be left in A registers.

The 1107 has a great number of comparative or test instructions.
In most cases these test instructions come in pairs; that is,
for each test of one mutvaily exclusive condition there is a
test for its opposite. For example, there is a test for zero
and a test for not zero. There are instructions that will test
within limits or test outside limits. There are also a series
of instructions which will search a specified number of locations,
testing each until a find is obtained. These search instructions

March 1970 CENFOR 1-25

are also available with masking, so that a test can be made
against only the extracted bits of a number of words.

Floating point arithmetic is also part of the repertoire of
the 1107.

1.5.4-. Input- Output Channels

The 1107 has multiple channels for input-output, each one of
which can be used for data input or output. Furthermore,
each channel can have a number of units associated with it.
For example, you might have six servos on one channel, two on
another, and a drum on a third channel. You could only read
one unit on any channel at a time, but you could be reading on
all three channels concurrently, or reading on two and writing
on one, etc. Only one word can be stored in or written from the
central computer at a time, but the central computer is so fast
that it can handle one write on tape, read one from tape, and
then come and get the next word from drum while still executing
program instructions. All this with the drum going full speed
and utilizing interlace.

Each channel has its own channel synchronizer and control unit
as well as whatever units are attached to that channel. The
channel synchronizer handles communication to and from the
central computer, including transfer of data words. The control
unit controls the operation of the associated peripheral units.

1.5-5. Peripheral Equipment

The peripheral equipment that is associated with the Census 1107
is only part of what could be associated. One item of peripheral
equipment is the drum. Note that the drum is not part of the
central computer memory and cannot execute internal processing
instructions. The drum is a storage device. The Census
configuration has one drum subsystem with two drum units, and
provides more than 500K memory locations of 36 bits on each
unit. After the initial access time required to find the first
location the drum transfer rate is 16.5 M/seconds per word. The
use of the drum as storage for program segments or tables during
a run is thus very feasible.

The FASTRAND II Subsystem also provides a storage medium for
programs and their source data. The subsystem is composed of
three FASTRAND II drums with a storage capacity of 22 million
words each.

There are three types of Servos that are associated with the
Census 1107. One type, the Uniservo IIA has variable recording
density of 125 and 250 characters to the inch, and thus a
variable transfer rate of 12.5 or 25,000 char. per. sec.

The Uniservo IIIA's are a new model Servo with a different
technical principle than the IIA's. These servo's have a

CENFOR 1-26 March 1970

transfer rate of 120K char. per. sec. and a rewind speed of 300
inches per second. With a dual channel synchronizer it is possible
to read and write or to read two units simultaneously. The mag-
netic tape used with this servo is physically different from the
tape on the Uniservo IIA. The High Speed Printer is different
from the off-line HSP's and it is on-line. This does not mean
that printing ties up the computer, since printing can take place
concurrently with a running program. A card-reader is also in-
cluded as on-line equipment.

The Uniservo IVC's are a magnetic tape subsystem which allows
complete compatibility between the Univac 1107, and IBM data-
handling equipment with off-line tape conversion. The IVC tapes
can be read or written with a density of either 200, 556, or 800
characters per inch.

The Census configuration has a Paper Tape Reader and Paper Tape
Punch. The paper tape reader can read at a rate of 400 c.p.s.
The punch can punch up to 110 frames p.s.

The Supervisory Console Printer provides facilities for programed
typeouts from the Central Computer. It also provides for type-ins
of required information or parameters. The console is equipped
with 15 console selective jump switches which are available to
programs, as well as 4- selective stops. However, FORTRAN programers
do not use tnese switches.

March 1970

CENFOR 1-27

INPUT UNITS

Paper Tape
Cards

Communication
Magnetic :

Tapes

Drums

Cards
Keyboard

CONTROL UNIT

1) Get Next Instruction

2) Interpret Instruction

3) Execute Instruction

MEMORY UNIT

Stores: l) Data

2) Instructions

3) Constants

->

ARTHMETIC UNIT

Multiplies, Divides

OUTPUT UNITS

Paper Tape
Cards

Communication
Magnetic:

Tapes

Drums

Cards
Printers

CENFOR 1-28

March 1970

1.6. EXERCISES :

1.6.1. Define the following:

a. bits

b. sign bit

c. word

d. printer character

e . software

1.6.2.

There are
character,
character is
characters to a word.

bits to a word.

bits make one octal

octal characters make a word. Each printer
octal characters. There are printer

1.6.3. The decimal value of:

777777777712 g

is

000000000025 8

is

777777777623 g

is

000000000123 8

is

77777777776

is

1.6.4. Show the octal contents of the word generated for each of the
following values.

a. -1

c. 65

10

b. 200

10

d. -65

10

March 1970

CENFOR 1-29

1.6.5. If y°u wanted to print the number "6219," could you just
generate the value 6219?

If you answered NO, what would you generate?

1.6.6. Circle the positive values

a. 177777777711 g

b. 421321421321g

c. 700000777734g

d. 345673456712 g

e. 333333322222 rt

f. 123456765432 g

g. 537117355371 g
h. 22334-4-556677
i. 377777777777 g
j . 400000000000 g

8

1.6.7. Show the complement for each of the above.

1.6.8. Perform the following operations:

a. 101001

-moiicn

e. 110110-

x 111 2

b. 111111
+ 10100^

f. 10101100
x 10100^

j . 217654.
- 24566°

c. 101101
" 110 2

g. 76532.
+ 7321g

d. 110110
" m 2

h. 713405.
+ 66l6g

i. 137362.
- 41414g

CENFOR 1-30

March 1970

1.6.9. Convert to decimal
a. I654r

( 8

c. 3162
e. 4.27,

8

b. 50131
d. 12345

8

8

1.6.10. Convert to octal:

a. 101101101110101011001,

c. 000110110101010110110,

b. 111100010011001000101,

d. 111000010001001011110,

e. 931507

10

f.

18902 L0

g. 2135

10

March 1970 CENFOR 1-31

1.6.1. a. A bit is the basic unit of information with which a

computer works. It may have a value of or 1.

b. A sign bit is the first bit of a word.

c. A word is a group of 36 bits.

d. A printer character is a group of six binary bits.

e. Software is the program of instructions that puts
the system to work.

1.6.2. 36, 3, 12, 2, 6

1.6.3. -53, 21, -108, 83, -10

1.6.4. a. 777777777776 (-1)

b. 000000000310 (200)

c. 000000000101 (65)

d. 777777777676 (-65)

1.6.5. The value 6219 would need to be expressed as Hollerith
characters. (A way will be shown later whereby a constant
may be expressed as consisting of Hollerith characters in a
form suitable for printing.)

1.6.6. a., d. , e., f . , h. , i.

1.6.7. a. 600000000066

b. 356456356456

c. 077777000043

d. 432104321065

e. 444444455555

f. 654321012345

g. 240660422406
h. 554433221100
i. 400000000000
j . 377777777777

CENFOR

1-32

1.6.8.

a.

1011111

base 2

b.

1010011

base 2

c.

100111

base 2

d.

101111

base 2

e.

101111010 base 2

f.

110101110000 base 2

g.

106053 g

h.

722223 g

i.

757^6 g

J.

173066 g

1.6.9.

a.

940

b. 20569

c.

1650

d. 5349

e.

279

March 1970

1.6.10. a. 5556531 g
c 0665266 g
e. 3433263

f. 44726,

b. 7423105
d. 7021136
g. 4127

8

8

2. THE FORTRAN LANGUAGE FUNDAMENTALS

March 1970 CENFOR 2- 1

2.1. WRITING FORTRAN PROGRAMS

A FORTRAN (FORmula TRANslator) statement may be written
anywhere in columns 7-72 of the FORTRAN coding sheet. Except
in special cases, blanks are ignored by the FORTRAN processor
and may be used to improve- the readability of the source
program printout. If the statement is too long to be contained
on a single line, it may be continued on up to 19 successive
lines by placing any character, other than zero, in column 6.
Columns 1-5 may be used to write statement labels which may be
any number from 1 to 32767. These labels are used when referencing
a statement. These labels need not be in any order. Columns
73-80 are ignored by the processor, but may contain any informa-
tion which will be helpful to the programer. Entire lines will
be ignored by the processor provided that column one (l) contains
a C. In this manner, comments may be included within the program
or blank lines may be used to separate sections of the program.

COLUMNS PURPOSE

1 C (comment)

1-5 Statement label (numbers 1-32767)

6 Any character besides zero or blank

indicates the line is a continuation
of previous line.

7-72 FORTRAN statement

FORTRAN has no "lower case" letters, therefore only "CAPITAL" letters
should be used when coding.

2.1.1. BASIC CHARACTERS

Only the characters in the following lists can be used in the
structure of the FORTRAN language :

letters: A,B,C,D,E,F,G,H, I,J,K,L,M,N,0,P,Q,R,S,T,U,
V,W,X,Y,Z

digits: 0,1,2,3,4,5,6,7,8,9

arithmetic

operations: +,-,*,/,**"

relational

operations: .GT. ,.GE. ,.LT. ,.LE. ,.EQ.,.NE.

logical

operations: .NOT. , .AND. , .OR.

CENFOR 2- 2

March 1970

2.1.1. BASIC CHARACTERS (Continued)

logical values : .TRUE. , .FALSE,
delimiters: (,)>/>•
special: \$
assignment: =

2.1.2. PREPARATION OF PROGRAMS AND RELATED MATERIALS FOR KEY PUNCHING

In order to avoid misunderstanding and resultant key punching
errors, please use the following notations for certain char-
acters :

COMMENT

Slash optional but preferred,

Must have underline.

Do not use flag and/or
bottom bar.

Use bar at top and bottom
as in capital "I".

Do not slant bottom
upwards .

Add bar thru center of "Z".

Do not underline.

Must have underline.

Must have bar at top
and underline.

Downstroke to "u" pre-
ferred. Do NOT UNDERLINE.

Must have underline.

From corner to corner.

WRITTEN AS

INTERPRETATION

or

(Numeric)

(Alpha)

/

1

(Numeric)

I

i

(Alpha)

2

2

(Numeric)

Z

z

(Alpha)

5

5

(Numeric)

S

s

(Alpha)

J

J

(Alpha)

Dor u,

V
/

u

V

Alpha)

Alpha)
slash

March 1970

CENFOR 2- 3

form BC-426

(2-1 1-6B)

FORTRAN CODING

PROBLEM

c

STATE-
MENT
NUMBER

c

N

T.

STATEMENT

1

C

2 |3 4 5

6

7 8 9 jio hi |l2

13 14 15 16 17 18

19 20 21 22 23 24

25 26 27 28 29 30

3 1 32 33 34 35 36

37 38 39 40 41 42

Pi rIo

G

R |A !m 1 |T |0

; f !i In |d

T!H,E AR

E A !S ; OF

|t r|i|a n

G.L E|S|

C

!t h e

1

L E IN |G ! T H

s : :o f It

HE !S ! I D

E : S ARE

: R

in : I

C

F : R '0 j M ' |a

C A R D -

TO-TlAP

e| reel

T

A ,

B , C

C

l

j

1 !

i .

'

ill

1 :

2

r;e j a

D (

5J, 2 3 )

i i :
A 1 , B , C

2 3

F:0;R ! MiAT

_|L

3 If i j

M)

|

s|=|(|a| i+

|B ! I+i C

) / 2 .

\

1

A R EA- S

Q;r t ( s *

(IS - A ) U

( s - pi) *

( S - C

) )

2 5

w:r i|tIe:(

6 |«| 1 | 7 h A

, B L C ,,A

R E A

\

1 7

FOR MA T

( 1. pL Ell

6.7)

GO TO

2 j)

(

END

! |

1 i

i

I |

1

i 1

|

j j

! |

1

1

\

II

• !

i |

1

1 i ' '

1 M ;

|

! ;

1 |

i ! 1 1

1 t i

i

i !

i i

, 1— 1 1

CENFOR 2- <4

March 1970

2.1.3. SOURCE STATEMENTS

The job of the programer is to compose a series of instructions
which become the source program. When the computer performs these
instructions in the specified order, the data is processed to
obtain the desired results. Each instruction is concerned with
one aspect of the problem; it may cause data to be fed into the
computer, calculations to be performed, decisions to be made, results
to be printed, etc. Some statements merely provide information to
the processor at assembly time. The processor then expands this
source program into a language which the computer can understand
and these object program (machine language) instructions are ful-
filled.

Executable Statements

Arithmetic

Logical

Unconditional GO TO

Assigned GO TO

Computed GO TO

ASSIGN

Arithmetic IF

Logical IF

W

CONTINUE

CALL

RETURN

STOP

WRITE

PRINT

PUNCH

REWIND

BACKSPACE

END FILE

Non-executable Statements
SUBROUTINE
FUNCTION
FORMAT
PARAMETER
INTEGER
REAL

DOUBLE PRECISION

COMPLEX

LOGICAL

EXTERNAL

ABNORMAL

END

March 1970 CENFOR 2- 5

2.2. CONSTANTS

A constant is any quantity which appears in a FORTRAN statement
in the form of a specific numeric or logical value.

Every constant is interpreted as a binary number by the processor,
since the computer can interpret only two signals — charge and no
charge. The memory of the computer consists of a series of words
which may be referenced. Each word contains 36 bits (binary digits)
each of which is either a charge or no charge.

1. No commas may be written within a constant.

2. All constants (except logical)

a. if negative, must have a minus sign

b. if positive, may have a plus sign

c. if no sign, the constant is assumed to be positive.

There are five types of constants :

1. Integer

2 . Real

3. Double Precision

4. Complex

5. Logical

In addition, a string of Hollerith characters preceded by wH may
be used as a constant where "w" stands for the number of fieldata
characters. If "w" is not divisible by 6, the field will be
space filled on the right. See 7.5. and 5.4.5.9.

2.2.1. INTEGER - FIXED POINT

An integer is a whole number without a decimal point. It
may be positive or negative. The absolute value of the
number may range from to 3435973^367 = (235-1) (1 to 11
digits) .

The integer number is represented in the computer as a
binary number which occupies one full word of 36 bits. The
first bit of the binary word is the sign (0 for positive, 1
for negative) .

36 bits

s [

!

I I .

Examples of INTEGER numbers:

12

1234

6

10000

.12345678

CENFOR 2- 6

March 1970

2.2.2. REAL - Single Precision Floating Point

A real number may be a whole number, a fractional number, or a
mixed number with a decimal point. There may be from 1-9 signifi-
cant digits. The magnitude must be in the range 10~3° to 10 + 3°.
The decimal point may express the exponent, or a power of ten may
be applied if the number is followed by the letter "E" with a
signed (+ is optional) one or two-digit exponent.

The real number occupies one computer word in hardware single
precision floating point format which consists of a sign bit,
an 8-bit characteristic (octal 200 bias) and a 27-bit mantissa.

Examples of REAL numbers:

FORTRAN NOTATION

.1E3

2.56

-.4-3E5

1E12

-.492E-4

.123456E2
1.
-.00004.92
-43000.

12.34-56

ACTUAL NUMBER

100

2.56

-43,000

1000000000000

-.0000492

12.3456

1
-.0000492
-43,000
12.3456

March 1970

CENFOR 2- 7

2.2.3. DOUBLE PRECISION - Double-Precision Floating Point

A double precision number may be a whole number, a fractional
number, or a mixed number with a decimal point. There may be
from 1 to 17 significant positive or negative digits. The
magnitude must be in the range 10~38 to 10 + 38.

A double precision constant must be followed by the letter "D"
with a signed (+ Is optional) one or two-digit exponent.

The double precision number occupies two consecutive storage
locations. In the 1107, with the sign bit being in the first
bit of the first word, the format is that of two real numbers.
However, the 1108 hardware recognizes a different format.

Examples of DOUBLE- PRECISION constants:

FORTRAN NOTATION ACTUAL

0.0D0
1.0D0
16.9D+1
+8.897D-10
-1750. D+3
123.4567891D0
. 1234-567891D3
16D0

1
169
.0000000008897
-1750000
123.4567891
123.4567891
16

CENFOR 2- 8 March 1970

2.2.4. COMPLEX

A complex number is written in the form (r,i) where "r"
represents the real part and "i" represents the imaginary-
part. Each part is internally represented by one single
precision floating point word. Each part is written as if
it were a real constant. The two parts occupy consecutive
locations in memory. The rules which apply to REAL constants
apply to each part.

Examples of acceptable COMPLEX constants:

FORTRAN Notation

(0.0,1.0) l.Oi (pure imaginary)

(3426.78,-293.6) 3426. 78-293.61

(4.12E2,6.5) 4-12. +6. 5i

U.12E-2,6.5E3) .0412 + 6500i

( 4 . 12E-10 , 6 . 5E-3 ) . 000000000412+ .00651

2.2.5. LOGICAL

There are two logical constants: .TRUE, and .FALSE.

The periods are part of the logical value notation and
must be written.

The internal representation is:

If .TRUE., the right most bit is a 1.

If .FALSE., the right most bit is a 0.

2.3. VARIABLES

A variable is a named position in memory which will contain a
single value at any one time, but this value may be changed an
infinite number of times throughout the program; but for any
given time, each variable has only one value. It may be
referenced by using its symbolic name in any way that a constant
can be used. The old value will be destroyed when a new value is
placed within this position. The symbolic name is composed of
from one to six alphanumeric characters, the first of which must
be alphabetic. No special symbols are allowed. The assignment
of names is under the control of the programer. There are five
types of variables: INTEGER, REAL, DOUBLE PRECISION, COMPLEX
and LOGICAL. The type is specified either implicitly

March 1970
2.3. VARIABLES (Continued)

CENFOR 2- 9

or explicitly at the beginning of the program. A variable
will occupy the same number of storage locations as a constant
of the same type and may take on any value its corresponding
type of constant may assume.

Specifying the Variable TYPE

If the variable name begins with the letters I-N, the variable
will implicitly be defined as "integer" type. If the variable
name begins with any other letters, the variable will implicitly
be defined as "real" type. These rules may be overridden by the
use of type statements at the beginning of the program. For
example, INTEGER A will cause A to be an integer variable, whereas
it would have been "real" without this statement.

Double precision, complex, and logical variables must be defined
in a type statement. The format for the type statement is TYPE
A,B,C where TYPE is one of the five types of variables and A,B,
and C are the variables^ separated by commas, which are to be that
type.

Examples

REAL I,J,K
INTEGER A,B,C,D
DOUBLE PRECISION N,D,X
COMPLEX M,V,Y
LOGICAL L,0

Examples of acceptable implicit variable names:
REAL INTEGER

G

GAMMA

Gl

R19

X

SIGMA

I

J

K

IJK

LARGE

N2

N

IBM

LAST

NG

CENFOR 2-10 March 1970

2.4 OPERATORS

There are five basic arithmetic operations — addition, subtraction,
multiplication, division, and exponentiation. Each is represented
by a distinct symbol.

Subtraction

Multiplication *

Division /

Exponentiation ** (considered to be one symbol)

It is never correct to write two operators side by side. These 5
symbols are the only ones used in a FORTRAN statement. Any others
must be composed of the basic five or computed by using the mathe-
matical functions that are discussed later.

2.5. EXPRESSIONS

A FORTRAN expression is a rule for computing a numerical value.
An expression may consist of a single constant, a single variable,
or a single function reference (described later). These elements
may be combined by using operation symbols and parentheses to
build up more complex expressions.

The rules for writing expressions are:

1. Two operation symbols must not appear next to each other.
Thus A" ;; --B is incorrect. However, A* (-B) is correct, or -B*A
is correct.

2. Parentheses do not indicate multiplication, but indicate that
the operations within the innermost parentheses are to be per-
formed first.

3. When the order of operations is not specified by the use of
parentheses, the sequence is as follows: All exponentiations
are performed first, then all multiplications and divisions
from left to right, and finally all additions and subtractions
from left to right.

Thus, these two expressions achieve the same effect:

a. A*B+C/D-E*- ; '-F

b. (A*B )+(C/D)-(E**F)

4-. Parentheses must be used to indicate groupings just as in

ordinary mathematical notation. Parentheses force the inner
operation to be done first. Thus (X+Yp must be written
(X+Y)**3 to convey the proper meaning. X+Y**3 would change
the meaning, although it is a valid expression.

March 1970 CENFOR 2-11

2.5. EXPRESSIONS (Continued)

B C

5. The ambiguous expression A must be written as A**(B**C) or

(A*" X "B)" ;HC "C, whichever is intended, but never as A" X ~*B**C.

6. Integer expressions may be raised to an integer power. Real
expressions may be raised to either an integer or a real
power.

7. If the terms of an expression are of varied type, the
priority of the result is DOUBLE PRECISION, REAL, INTEGER.
For example, if any term of an expression is DOUBLE PRECISION,
the answer will be DOUBLE PRECISION. Likewise, if (and only if)
all the terms are integers will the result be an integer.

8. If one of the terms of an expression is complex while another
is real, the operation will be performed as if all the terms
are complex. The real numbers will be assumed to have an
imaginary part of zero. Necessarily, the result will be com-
plex.

It is illegal to have a complex and a double precision number
within one expression since the result would be too large to
fit into the allocated space.

9. Complex data can be used in an expression with other complex
data or with real data. In operations not involving exponentia-
tion, the mixing of a real and a complex quantity results in

a complex value. However, raising a complex value to a real
power affects both the real and imaginary parts.

10. Logical data can form an expression only with other logical
expressions. See 2.8.

CENFOR 2-12 March 1970

Examples of Expressions
1

A+B
I

X**1.67
4

7+K*4

B**2-4-.*A*C
3.

xA

AB0+DE7*UE7

(i.4S/t)**(t*p)/r

A*B*C**2
(C/A*D)**2

(A+B)+(C+D)

A**3+D

D*(A+B)

(B+C+A+B)**D

a/b/(c*d**a)
X+Y**3

a+b/c
a+b/( c+d)

( ( A+B)/( C+D) )**2+X**2

(X+2.0)/(Y+4.0)

2#N+1

A.GE.B
A.N0T..GT.B

March 1970 CENFOR 2-13

2.5.1. INTEGER DIVISION

Any fractional portion resulting from the division of integer
data is truncated without rounding. The following examples
illustrate FORTRAN integer division:

5/4 produces a result of 1

l/2 produces a result of

10/4. produces a result of 2

But in real mode

5.O/4..O will give the result 1.25
4.0/5.0 will give the result .8

The MOD function is available to return the remainder as the
value of the function when integer division is performed.
The AMOD function is used for real division. An example of
the MOD function would be to divide integer Nl by integer N2
and save the remainder in N3:

N3 = M0D(N1,N2)

Successive integer divisions should be clarified by usin^
parentheses. The following illustrate how the use of
parentheses may produce different results:

Expression: (l/j)/K l/(J/K)

Step 1. (4/3)/2 4/(3/2)

Step 2. 1/2 4/1

Step 3. 4

CENFOR 2-14- March 1970

2.5.2. LIMITATIONS OF ARITHMETIC OPERATIONS

The programer is reminded that a real value is an approximation
to a real number, and any arithmetic operations involving real
values may introduce an error in the least significant digit
of the result due to rounding and truncation.

During computations, certain faults (characteristic underflow,
characteristic overflow and divide overflow) may sometimes
occur. When a fault of this nature occurs, a result of zero
is returned. The programer may call the Census subroutine
CHKDIV, which returns control to the programer' s coding for
special action; or he may call NOCHK to terminate the run with
a memory dump. (See 9.1. and 9.2.)

It should be noted that division by zero results in divide over-
flow.

2.5.3. FUNCTION REFERENCE

A function reference is evaluated prior to that point where
its value is required as a term. Thus, in the expression
A' h; "SIN(B) , the sine of B is found before exponentiation is
performed. In the expression A*»SIN(X+Y), the sum of X+Y
is found before the sine is evaluated.

March 1970

CENFOR 2-15

2.6 ARITHMETIC ASSIGNMENT STATEMENTS

An arithmetic assignment statement is an order to FORTRAN to
compute the value of an expression on the right and to give that
value to the variable named on the left. The equal sign is
that order . All of the arithmetic necessary to create a value is
done on the right side of the equal sign. That value is then
placed into the variable designated on the left side of the equal
sign.

Examples:

N = N+l

R = (A+B*X)/(C+D*X)

DELTA = BETA+2

¥ = (A-B)**2

C = A*A+B*B

R = R**2

P = ((F+G)/(R+S))**2

G = G+2

A = -1.0-A

D = 1.1*D

2.7. ARITHMETIC IF

The arithmetic IF statement determines the statement to be executed
next, dependent upon the value of an arithmetic expression.

The general form of the arithmetic IF Is as follows:

IF (arithmetic expression) label, , labels, labels.

The arithmetic expression may not contain complex values. It must
be enclosed in parentheses.

This statement provides for a conditional three-way branch. If
the value of the arithmetic expression is negative, control is
transferred to the statement specified by label., . If the value is
zero, control is transferred to the statement specified by label .
If the value is positive, control is transferred to the statement
specified by label-.

Note that the label may be a switch variable to which a statement
label was previously assigned by an ASSIGN statement. See 2.13.2.

CENFOR 2-16 March 1970

2.7. ARITHMETIC IF (Continued)

A convenient feature of the Census FORTRAN is the omission of
a label if it is the intent to allow control to fall through to
the next statement.

Examples of Use :

IF (NUMBER) 5,10,5
IF (J-6) , , 50

2.8. LOGICAL EXPRESSIONS

A logical expression is one which takes on the value .TRUE,
or .FALSE..

A logical constant is a logical expression.

A logical variable or function is a logical expression.

The relational operators used in logical expressions are:

.EQ. Equal to

.NE. Not equal to

.LT. Less than

.LE. Less than or equal

.GE. Greater than or equal

,GT. Greater than

.NOT. Used prior to expressions including these relational
operators it reverses the logic

.AND. True if both conditions are true

.OR. True if either condition is true

Logical variables may not be used with the relational operators
except .AND. and .OR..

As in arithmetic operations, when the order of operations is not
specified by the use of parentheses, .LT., .LE., .EQ., .NE. , .GT.,
.GE. are evaluated first, followed by .NOT., then .AND. and finally
.OR..

March 1970 CENFOR 2-17

2.8. LOGICAL EXPRESSIONS (Continued)

Examples of Logical Expressions:

A+l .GT.B.0R.C.AND.G+2.NE.H

X.LE.2.1

X. GE.EPS.AND.NIMBER.LT. 10

.NOT. (X.LT. 12.0)

2.9. LOGICAL STATEMENTS

The logical statement has the form v = e where v is a logical
variable and e is a logical expression.

Rales:

1. The logical variable will be .TRUE, if the expression
is true.

2. The logical variable will be .FALSE, if the expression
is false.

Examples :

LOGICAL A,B,C,D,E

A = N.EQ.M

B = N.EQ.10

C = X.LT. 12.0

D = .NOT. (X.LT. 12.0)

E= X+l.GT. Y.0R.Z.AND.G+2.NE.H

2.10. LOGICAL IF

The logical IF statement has the general form IF (e)S where e is
a logical expression and S is any other statement except another
logical IF or a DO. If the logical expression is true, then the
statement S is executed. If the logical expression is false, con-
trol will be transferred to the next executable statement following
the logical IF. See chapter 4 for a discussion of the DO statement.
Examples :

IF (A.GT.B.AND.C.LT.D) GO TO 50

GO TO 28

IF (N.EQ.L .AND.M.EQ.20) N=N+1

CENFOR 2-18 Ma rch 1970

2.10. LOGICAL IF (Continued)

Whenever an integer constant is used within a Logical IF
expression, then that constant represents a decimal number.
Sometimes it is desired to extract an XS3 character from a
record and compare the character to a decimal number. In
order to select the right constant, the XS3 character must be
converted to octal and the octal should then be expressed as
a decimal integer. For example, it is desired to check for
the XS3 character 7. Checking the code translation table,
one sees that XS3 "7" is really octal "12". Converting
octal "12" to decimal, the correct integer constant is "10'i A
table of XS3 numbers appears below:

XS3 Char Octal Decimal

3 3

1 4 4

2 5 5

3 6 6

4 7 7

5 10 8

6 11 9

7 12 10

8 13 11

9 U I 2

Likewise, a table of Fieldata characters appears below:

Fieldata

Character Octal Decimal

60 ^8

1 61 49

2 62 50

3 63 51

4 64 52

5 65 53

6 66 54

7 67 55

8 70 56

9 71 57

Any Hollerith character may be expressed as a decimal number.

Consult the language code list for the octal code of the char-
acter.

March 1970 CENFOR 2-19

2.11. PARAMETER VARIABLES

It is sometimes desired to compile a program several times
where the values of certain INTEGER constants are the only
changes of the FORTRAN text from one compilation to the other.
Instead of changing these -constants throughout the program each
time, a symbolic name may be used which is to appear in a
PARAMETER statement before any other reference to the name :

PARAMETER i = m i = m , , i = m.

where the "i 1 s 'are any symbolic names (See 2.3) and the m's"are
INTEGER constants. The effect of referencing "i" is exactly
the same as if the INTEGER constant "m" would stand in its
place.

This symbolic name, called PARAMETER variable, therefore must
not appear in places where INTEGER constants cannot appear
(e.g. as left hand variable of an arithmetic statement, etc.).

Example of a PARAMETER statement:

PARAMETER J=l, K2=-4, ZEST=654

The use of PARAMETER variables is most useful in achieving
variable dimensions in arrays from one assembly to another.
Refer to chapters 3 and 7.
Example :

PARAMETER N= 100, M = 200

DIMENSION X(N), T(M) , Z(N,M)

2.12. CONTINUE STATEMENT

The statement

CONTINUE

itself causes no action in the object program, but provides a
valuable means to terminate an iteration of a DO-loop skipping
the last statement (s) of the range. A control statement any
place in the middle of the range deciding the termination of the
iteration transfers control to a CONTINUE statement. The CON-
TINUE statement must be the last statement in the range; that is,
the statement number preceding it also must appear in the DO
statement. If the iterations of an inner DO-loop are terminated
as described above, the CONTINUE statement cannot be regarded as
the last statement of both the inner and outer DO-loop. Two
CONTINUE statements with different statement numbers will denote
the end of the inner and the end of the outer DO-loop respectively.
Control transfer from the range of the inner DO-loop to the
second CONTINUE statement means the termination of an outer
DO-loop iteration. A CONTINUE statement must be used where the
last action statement is a control statement. The CONTINUE
statement may also be used outside DO-loops. (See 4.)

CENFOR 2-20 March 1970

2.13. GO TO

2.13.1. The Unconditional GO TO

is an unconditional branch to a
statement label. The form of
the statement is:

GO TO label

The Computed GO TO is a
selective branch to one of
several possible statement
labels. The form of the
statement is:

GO TO (label.,, labels, labels ... label,), integer
variable

When using the computed GO TO, the value contained in the
integer variable should be a positive, non-zero number within
the range of 1 and the number of places to go in the GO TO list.
If the number is 1, then GO TO label 1. If the number is 2,
then GO TO label 2 etc. If the number is outside the range,
then control goes to EXEC for an error termination. Therefore,
the programer may test the variable beforehand and take
specific action if desired.

Example: N = 1+1

IF (N.LT.1.0R.N.GT.4) GO TO 100

GO TO (10,20,10,40), N

or GO TO (M1,M2,M.1,M4), N

Note: The labels used in the computed GO TO may be switch
variables containing statement labels. A variable
which has been given the address of a statement
number before its reference in a GO TO statement is
referred to as a switch variable. See 2.13.2.

March 1970

CENFOR 2-21

2.13.2. ASSIGN STATEMENT

The ASSIGN statement is used only for the assignment of a
statement number to a variable which will later be used by
a control statement that is not a DO.

The form of the statement is : . SS t GN T q •

where n is a statement number and i is a nonsubscripted
integer variable that appears in a control statement.

The execution of an ASSIGN statement presets to "n," the
destination of all Control Statements pertaining to "i."

For example :

5 ASSIGN 10 to J

6 GO TO J, (10,20,30)

7 GO TO J, (15,25,10)

8 GO TO J

Since statement 5 assigns the value 10 to J, statements 6, 7,
and 8 are executed as if they had been written:

6 GO TO 10

7 GO TO 10

8 GO TO 10

Note that

ASSIGN 10 to J

does not have the same meaning as

J = 10
In particular, the sequence

ASSIGN 10 to J

K = J+l

will not produce a meaningful result,

CENFOR 2-22 March 1970

2.13.3. ASSIGNED GO TO

The assigned GO TO is the statement which is used after the
ASSIGN statement.

The general form is

GO TO i, (transfer list)

where i is the variable which has previously been set by an
assign statement, and the transfer list contains all the possi-
bilities of i separated by commas. The list may be omitted,
and the form may be

GO TO i

2.H. MATHEMATICAL FUNCTIONS

FORTRAN provides for the use of certain common mathematical
functions, such as square root, logarithm, exponential, sine,
cosine, arctangent, and absolute value. In order to make use of
a mathematical function, it is necessary only to write its name
and follow it with an expression enclosed in parentheses. This
directs FORTRAN to compute the named function of the value repre-
sented by the expression in parentheses. A complete list of these
functions is supplied at a later point in this manual under the
discussion of Functions.

A partial list of the mathematical functions follows :

Name Mathematical Function

EXP Exponential

ALOG Natural logarithm

AL0G10 Common logarithm

SIN Sine of an angle in radians

COS Cosine of an angle in radians

TANH Hyperbolic tangent

SQRT Square root

ATAN Arctangent; angle computed

ABS Absolute value

As an example, suppose it is necessary to compute the cosine of

an angle named X (a real variable) and to store the cosine in a

real variable named Y. We would write :.. „„_ ,„>.

Y = COS (X)

The following example illustrates the use of an arithmetic expression

as the argument of the function :^ _ oqtw m--x-p_/ 0%A*C)

March 1970 CENFOR 2-23

2.15. STOP

The STOP statement has the form:

STOP

or

STOP n

The execution of a STOP statement will terminate execution of
the object program and transfer control to the executive system,
"n" represents from 1 to 6 alphanumeric characters. If the
STOP statement is encountered, the entire STOP statement will be
displayed at the console. If a FORTRAN program is normally ter-
minated at a point where a STOP statement is omitted, STOP
ENDPRG will be printed at the console and control is transferred
to the executive system.

2.16. END

The END statement has the form

END

It is the last physical statement of a program unit. Its
appearance tells the compiler to compile the preceding statements
as one program unit.

At execution of an END statement, the object program is terminated
normally — indicated by "ENDPRG" on the console. If an END
statement is preceded by a statement number, it may be referenced
by a control statement.

2.17. EXERCISES

2.17.1. For the following, which are acceptable variable names? Indi-
cate the mode. For those which are not acceptable, indicate
why:

XSUB2

JOAN

KNT

GEORGIA

B58

0UT2

MASS.

FLA/7

ABE

CENFOR 2-2<4

March 1970

2.17.1 (Continued)

XSUB2

Acceptable

Real

JOAN

Acceptable

Integer

KNT

Acceptable

Integer

GEORGIA

Unacceptable

Real

Too many characters

B58

Acceptable

Real

OUT2

Acceptable

Real

MASS.

Unacceptable

Integer

Special symbols not
allowed in name.

FLA/7

Unacceptable

Real

Special symbols not
allowed In name.

ABE

Acceptable

Real

2.17.2. Solve the following:

Where A = 2, B = 1, C = 4, D

a. X = A+B-C

b. X = A*B*C#*2

c. X = (C/A*D)**2

d. X = (A+B)+(C+D)

e. X = A**3+D

f. X = D*(A+B)

g. X = (B*C+A+B)*-"-D
h. X = A/B/(C*D**A)

= 2

March 1970 CENFOR 2-25

2.17.2. (Continued)

a.

X =

2+1-4-

X = -1

b.

X =

2
2x1x4

X = 32

c.

X =

( 4-/2x2 ) 2

X = 16

d.

X =

(2+1)+ (4+2)

X = 9

e.

X =

2 3 +2

X = 10

f.

X =

2x(2+l)

X = 6

g.

X =

( 1x4+2+1 ) 2

X = 49

h.

X =

2/l/(4x2 2 )

X = 2 = 1 _
16 8 '

.125

2.17.3. Each of the following arithmetic statements contain errors
as stated:

1. Y = 2.X+A The * is missing.

2. 3.14=X-A The left side must be a variable name,

3. A=( (X+Y)A" ; " ( "2 Not the same number of right and

left parentheses. Also, the * is
missing.

4. X=l,624,009. " x " DELTA Commas are not permitted in

constants.

5. -J=l" x " x "2. Integer quantities may not be

raised to real powers. Also,
variable on left must not be written
with a sign.

6. BX6=1./-2." ;; ~A" ;H< "6 Two operation symbols side-by-side

not permitted, even though the minus
sign here is not intended to indi-
cate subtraction.

7. Z*X+B=Q Left side must be a single variable.

Should be Cf=Z*X+B

8. FNC=CUBRT(X+Y) No such function supplied. Write

FNC= ( X+Y)**0 . 33333333

9. .SQRT(Z)=Z"-""0.5 A function name cannot be used as a

variable name. Left side must be a
variable name.

CENFOR 2-26 March 1970

2. 17. 4-. Each of the following arithmetic statements contains at least
one error. State what is wrong with each:

1. -V = A+B

2. U = I

3. V-3.96 = X**1.67

4. A*X**2+B*X+C

5. Z2 = A*-B+C*H

6. X = 1+2.0 = Z+9.0

7. R = 16.9X+AB

2.17.5. WRITE ARITHMETIC EXPRESSIONS TO ACCOMPLISH THE FOLLOWING:

1. Add 2 to the current value of the variable named BETA.
Make the sum the new value of a variable named DELTA.

2. Subtract the value of a variable named B from the value
of a variable named A, square the difference, and assign
it as the new value of W.

3. Square A, add the square of B, and make the new value of C
the resulting sum.

4. A variable named R is to have its present value replaced
by itself raised to the power of 2.

5. Add the values of F and G, divide by the sum of the
values of R and S, and square the quotient. Assign
this result to P.

6. Increase the present value of G by 2 and replace the
present value of G with the sum.

7. Multiply the present value of A by -1.0 and replace the
present value of A with the product.

8. Assign to the variable named D a value 1.1 times as great
as the present value of the variable named D.

March 1970 CENFOR 2-27

2.17.5. (Continued)

1. DELTA = BETA+2

2. W = (A-B)**2

3. C = A*A+B*B

or
C = A**2+B**2

4-. R — R"' ; ""''~2

5. P = ((F+G)/(R+S))**2

6. G = G+2

7. A = -1.0* A

8. D = D*l.l

CENFOR 2-28 March 1970

2.17.6. EXERCISES

1. Write the following numbers as FORTRAN real constants:

256

2.56

-43,000

io 12

0.000000492
-10

-io" 16

2. Using the name rule, which of the following names are
acceptable for integer variables, and which are
acceptable as real variables?

Write I for integer, R for real, U for unacceptable:

G BT07TH

GAMMA ZSQUARED

GAMMA421 Z CUBED

I 12AT7

UK 2N173

UK* CDC160

J79-12 DELTA

R(2)19 EPSIL0N

A1.4 A1P4

FORTRAN ALGOL

March 1970 CENFOR 2-29

2.17.7. EXERCISES

Use the Logical IF and then use the Arithmetic IF to
solve both problems below.

1. If four variables (A,B,C, and D) are each equal to 25.0,
execute statement number 15. If one or more is not
equal to 25.0 execute statement number 30.

2. Assume that values have been computed for three
variables X,Y, and Z (no two values alike).

Write a sequence of statements to make the decisions
below:

If the value of X is:

(a) greater than Y and greater than Z, go to
statement number 10,

(b) less than Y but greater than Z, go to statement
number 20,

(c) greater than Y but less than Z, go to statement
number 30,

(d) less than Y and less than Z, go to statement
number 4.0.

CENFOR 2-30 March 1970

2.17.7. SUGGESTED SOLUTIONS TO EXERCISES
Logical IF solutions:

1. IF (A.NE. 25.0) GO TO 30
IF (B.NE.25.0) GO TO 30
IF (C.NE.25.0) GO TO 30
IF (D.NE.25.0) GO TO 30
GO TO 15

2. IF (X.GT.Y) GO TO 5
IF (X.GT.Z) GO TO 20
GO TO 40

5 IF (X.GT.Z) GO TO 10
GO TO 30

Arithmetic IF solutions:

1. IF (A-25.0) 30, ,30
IF (B-25.0) 30, ,30
IF (C-25.0) 30, ,30
IF (D-25.0) 30,15,30

2. IF (X-Y) ,50,5
IF (X-Z) ^0 ,50,20

5 IF (X-Z) 30,50,10
50 CONTINUE

3. SUBSCRIPTED VARIABLES

March 1970 CENFOR 3- 1

3.1. SUBSCRIPTS

It is often desirable to perform computations on groups of numbers
or to rearrange or edit them. These groups are called arrays.
All of the items within a group are identified by the same symbolic
name, and each element within an array may be referenced by writ-
ing a subscript (or subscripts) in parentheses after the name of
the array in which the element is found. (Refer to 3.4.)

Consider five numbers in a group called "VALUE".

Each number in the array can be referenced by its particular
subscript:

Position
Number

1

2

3

U

5

3.1.1. ALLOWABLE FORMS OF SUBSCRIPTS

Subscripts may be integer constants or integer variables. Three
other forms of subscript are permitted. If I stands for a non-
subscripted integer variable and L and L' are integer constants,
all the allowable subscript forms are as follows :

FORM EXAMPLE

I J12

L 3

I+L K+29

L*I 2* LIMIT

L*I±L' 3*LAST-7

Values

Sub.

script Notation

1.0

VALUE (1)

5.9

VALUE (2)

3.6

VALUE (3)

2.17

VALUE U)

15.0

VALUE (5)

CENFOR 3- 2 March 1970

3.1.2. RULES FOR SUBSCRIPT FORMATION

1. The value of a subscript expression is determined each time
the subscripted variable is used in the program. It is
recommended that this value should not be less than 1, nor
greater than the maximum specified in the dimensions of the
array, to prevent undesirable effects.

2. A subscript must not be subscripted.

3. A subscript must not contain a function reference.

4. When an array name occurs without any subscripts, all sub-
scripts are assumed to be one. If any one subscript appears,
all must appear.

5. Up to seven levels of subscript are permitted.

6. If a variable has more than one subscript, then the total
number of variables appearing in the subscripts must be less
than 30.

7. Subscripts are separated by commas, enclosed in parentheses,
and are appended to the right of the array name to which they
apply; e.g., A(3*I-J+1,K).

16

8. Subscripts are treated as modulo 2 . However, Census con-
ventions allow modulo 2^-5 (32,768) memory cells for both
Instruction and data in one program.

9. When a subscript is derived as a product of variables, no more
than one variable may be an index of a DO. See Chapter U>

10. The information to the FORTRAN compiler regarding the number
and size of subscripts an array contains is supplied by the
DIMENSION, COMMON, or type statements. Every subscripted
variable must be mentioned in a dimensioning statement before
its occurrence in an executable function. See 3.4.

March 1970 CENFOR 3- 3

3.1.3. VALID SUBSCRIPTS USED WITH ARRAY ELEMENTS
ARAY (3)

A (I)
B (1+3)

C (JOB-5) provided that 5 <^ JOB <^ UPPER INDEX- JOB- 5
MATRX (7*IJK) where UK is the name of a SINGLE integer variable
BUF (3*1+4)
IN (6*M-l)

TABL (I,J*K+3,L-M,6*N) if J or K not a DO index
TAB (M1-M2-M3,L00K*4,7-J)
N (1,2)

3.1.4. INVALID SUBSCRIPTS USED WITH ARRAY ELEMENTS
ARR(-5) negative not usually permitted
LOT(O) zero not permitted

NEVER(17.23) real not permitted

K3(K(3)) a subscript must not be subscripted

BIG( 75000) must not exceed dimensions

NOP(J--K) invalid only if both J and K are DO indexes

HELP(4>2) valid if the array has exactly two dimensions

CENFOR 3- 4 March 1970

3.2. ARRAYS

The elements of an array are stored in successive storage units,
starting with the first element of the first dimension. The
total number of units required for an array is found by multi-
plying the dimension values specified in a declarator. Thus,
the declarator A(3,4) calls for 12 storage units. If double
precision is specified, then the number of units for each array
is automatically doubled.

The general expression for determining the location of an array
element is shown below.

Letters a,b, and c represent subscript expressions in the
references; letters A,B, and C represent the dimensions of an
array, and m is a multiplier specifying the number of storage
units required by each element of the array. Double precision
would require two units for m.

DIMENSIONS

SUBSCRIPTS

FORMULA

1

a

(a)m

2

a,b

(a+A*(b-l))m

3

a,b,c

( a+A* ( b-1 ) +A* B* ( c - 1 ) ) m

The following example assumes an array with three dimensions
(3,4,2) or (A,B,C) and subscripts given are (2,3,1) or (a,b,c).

The formula is :

(a+A*(b-l)+A*B*(c-l))m
substituting ( 2+3 ( 3-1 )+3*4* ( 1-1 ) ) 1

2+3(2) + 12(0)
evaluated as 2+6 = 8

When the computed subscript is added to the beginning location
of an array, the compiler must subtract one. In other words,
the eighth cell of an array would be array name plus 7.

March 1970 CENFOR 3-5

3.2.1. ONE-DIMENSIONAL ARRAY - "LIST"

A (N)
ame No.

List Name No. of elements in List

FORTRAN: A(l) A(2) A(3) . . .A(l) . . . A(N)

MEMORY: A A+l A+2 . . .A+I-l. . .A+N-l

So A(I) = A+I-l

3.2.2. TWO-DIMENSIONAL ARRAY = "TABLE"

B^5,4) b n b 21 b 31 b^ b 51

No. of No. of
COL ROW 12 22 32 4-2 52

b 13 b 23 b 33 b 4-3 b 53

b H b 24 b 3^ b U b 54
FORTRAN: B(l,l) B(2,l) B(3,l) B(4,l) B(5,l) B(l,2) B(2,2) B(3,2 ; n

MEMORY: B B+l B+2 B+3 B+4- B+5 B+6 B+7

FORTRAN: B(4,2) B(5,2)

MEMORY: B+8 B+9

FORTRAN: B(l,3) B(2,3) B(3,3) B(4,3) B(5,3) B(l,4.) B(2,4)

MEMORY: B+10 B+ll B+12 B+13 B+H B+15 B+16

FORTRAN: B(3,4-) B(4,4) B(5,4)
MEMORY: B+17 B+18 B+19

IF B is dimensioned as B(M,N), then the location of
B(I,J) = B+(I-1)+(J-1)*M

CENFOR 3- 6

March 1970

3.2.2. TWO-DIMENSIONAL ARRAY = "TABLE" (Continued)

An array may be thought of as one long string broken into smaller
sections with individual elements. How these elements are referenced
is up to the programer. Consider an array with two dimensions:

DIMENSION A (5,6)

The matrix A will contain six groups with five elements in each
group. The first dimension pertains to the elements.

The programer may have a mental picture of the 30 words in memory
as five columns and six rows as in the following sequence :

Group 1

1

2

3

4

5

Group 2

6

7

8

9

10

G'ioup 3

11

12

13

14

15

Group U

16

17

18

19

20

Group 5

21

22

23

24

25

Group 6

26

27

28

29

30

The programer may prefer to think of these words as arrayed in
the following order as five rows and six columns.

1

6

11

16

21

26

2

7

12

17

22

27

3

8

13

18

23

28

4

9

14

19

24

29

5

10

15

20

25

30

In any event, no matter what the mental picture, o the DIMENSION
A(5,6) means that the first subscript should refer to the five
cells within a group, and the second subscript should refer to
the group number.

A word of cautionl When reading records prepared previously, be
consistent with dimensions and the mental concept of columns and
rows or rows and columns. DIMENSION A(6,5) means five groups of
six elements each. DIMENSION A(5,6) means six groups of five
elements each.

March 1970 CENFOR 3-7

3.2.3. THREE-DIMENSIONAL ARRAY - SET OF TABLES

c(4 > 3 ' 2) c m C 2ii c 3ii C 4ii

no. of no. of no. of

COL ROW TAB 121 221 321 4.21

r r c r
131 231 331 431

r c c c

112 °212 °312 412

r n n r

122 222 322 4-22

r r c r

132 232 332 432

FORTRAN: C(l,l,l) C(2,l,l) C(3,l,l) CU,l,l)

MEMORY: C C+l C+2 C+3

FORTRAN: C(l,2,l) C(2,2,l) C(3,2,l) C(4,2,l)

MEMORY: C+4 C+5 C+6 C+7

FORTRAN: C(l,3,l) C(2,3,l) C(3,3,l) C(4,3,l)

MEMORY: C+8 C+9 C+10 C+ll

FORTRAN: C(l,l,2) C(2,l,2) C(3,l,2) 0(4,1,2)

MEMORY: C+12 C+13 C+14 C+15

FORTRAN: C(l,2,2) C(2,2,2) C(3,2,2) C(4,2,2)

MEMORY: C+16 C+17 C+18 C+19

FORTRAN: 0(1,3,2) C(2,3,2) C(3,3,2) C(4,3,2)

MEMORY: C+20 C+21 C+22 C+23

IF DIMENSION C(N1,N2,N3), then the location of

C(I,J,K) = C + (i-l) + (j-l)*Nl+(K-l)*Nl*N2

CENFOR 3- 8 March 1970

3.3. TABLES AND FILES

3.3.1. A TABLE or FILE or MATRIX may be placed into a two-dimensional

array and a SET OF TABLES or SET OF FILES into a three-dimensional
array. When setting up such arrays, the following convention
should be used:

TABLE

A (No. of COL, No. of ROW)
FILE

A (No. of Words PER RECORD, No. of RECORDS)
SET OF TABLES

B (No. of COL, No. of ROW, No. of TABLES)

SET OF FILES

B (No. of Words PER RECORD, No. of Records PER FILE, No. of FILES)

If the convention is followed, each table will be stored in
sequence — row by row, and each file — record by record;
likewise, each set of tables will be in sequence table by table
and row by row within each table, and each set of files in
sequence file by file and record by record within each file.
This will allow statements like"READ (5,10) A" and "WRITE (6,20)
to read or display entire arrays in the correct order. Moreover,
it will make it possible to operate on individual records, or
groups of records within files, or on files or groups of files
within sets of files, particularly when using functions and
subroutines.

March 1970

CENFOR 3- 9

3.3.2. EXAMPLES

1. Suppose we have a file punched on cards in the format
shown below, and we want to read this file into memory,

card no.
1
2

3
4

5
6

The statements below including the formatted READ state-
ment (refer to Chapter 5)

INTEGER A (5,6)
1 FORMAT (A6,A1,I3,U,I3)

will read the file into A as shown below:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

n

a

m

e

^

h

t

w

t

a^e

A

L

L

E

N

M

6

8

1

5

5

3

6

/ ■■o

B

E

T

T

Y

F

6

4

1

1

5

3

3

II

C

I

N

D

Y

F

5

9

9

5

1

2

/ 1

o

D

A

V

I

D

M

5

7

9

1

E

L

L

E

N

F

5

3

7

8

8

\

H

o

F

R

A

N

K

M

4

6

6

4

]

Q

M

J

3

Ni

m.1

)ei

f

wo:

pd<

Dei

• r

ec

3rd

IZ

5

LOCATION

CONTENTS

elative Location IFORTRAN Tag

OCTAL

Interpreted

A(l,l)
A(2,l)

A(3,l)
A(4,l)
A(5,l)
A(l,2)
A(2,2)
A(3,2)
A(4,2)
A(5,2)
A(l,3)

06 21 21
22 05 05
00 00 00
00 00 00
00 00 00

07 12 31
13 05 05
00 00 00
00 00 00
00 00 00
10 16 23

12 23 05
05 05 05
00 01 04
00 02 33
00 00 44
31 36 05
05 05 05
00 01 00
00 01 63
00 00 41
11 36 05

ALLEN

M

BETTY
F

68

155
36

64

115

33

CINDY

CENFOR 3-10

March 1970

3.3.2. EXAMPLES (Continued)

2. Suppose we have a file In an array which we have
dimensioned as F(20,500) (five hundred records and
twenty words per record) and that we wish to use the
sort routine (shown below) to sort records 51 through 75
of the file.*

The statement CALL SORT (F(l, 51) ,25,20, K) will
accomplish this, whereas if the convention had not
been followed in the main program or subroutine, it
would have been almost impossible to do.

SUBROUTINE SORT (A,N,W,K)
C A=ARRAY TO BE SORTED
C N=N0 OF RECORDS
C W=N0 OF WORDS PER RECORD

• • •

DIMENSION A(W,N)

3.4-. DIMENSION LIMITS

3.4.1. Arrays may have 1-7 dimensions. Array sizes may be specified
in DIMENSION, COMMON or type statements. Dimension limits
may be unsigned integer constants or variables previously
defined in PARAMETER statements. Refer to Chapter 7, "SPECI-
FICATION STATEMENTS."

EXAMPLES :

INTEGER A,B,C
DIMENSION A(2),B(100),C(5)
INTEGER A(2),B(100),C(5)
INTEGER T

C0MM0N/ALPHA/M( 20 ) , T ( 10 , 6 )
INTEGER A(100),B(3,3)
REAL I(2,5),J(9),K(30)
COMPLEX X( 50), 1(4-, 4, 4)

PARAMETER S = 100

DIMENSION X(S),Y(S,2)

DIMENSION AR( 5,4,8,6)

PARAMETER N = 50

REAL K(N,N),P(30),L(N)

LOGICAL R,S,T

DIMENSION R(10),S(3),T(2,2)

COMMON /MMM/R,S,T

* A sort will arrange or sequence items according to a specified
set of rules.

March 1970

CENFOR 3-11

3. 4-. 2. It is permissible to refer to array names in I/O statements
or as arguments of functions and subroutines. Otherwise,
any reference to an array should contain the same number of
subscripts with which it was dimensioned.

EXAMPLES :

INTEGER A (100)

• • •

INTEGER A (100)

• • •

Illegal Operations
DIMENSION 1(5,3)

X(10) =

REAL M(10,10)

• • •

CALL ZERO (M,100)
DIMENSION N(50),P(60)

• • •

WRITE (5,6) A,N,P,X,Y

INTEGER Q(500)

Q = Q+l (if Q(2) is intended)

3. 4-. 3. It is legal to refer to an array with dimensions exceeding
those with which it was dimensioned, making possible zero
and negative subscripts. This procedure is not recommended.

EXAMPLE : COMMON A(5) ,B(3) ,CU)

A(l) A(2) A(3) A(4) A(5) B(l) B(2) B(3) C(l) C(2) C(3) CU)

!! ?l II II

B(-4.) B(-3) B(-2) B(-l) B(0)

it it it it

BU) B(5) B(6) B(7)

or

DO 10 1=1, 12
10 A(I) =

DO 10 1= -4,7
10 B(I) =

3. 4-. 4-. At the time of computation, it is possible to assign data

into variables or into named arrays. This is done by means
of the DATA statement. This subject is discussed in further
detail in Chapter 7 "SPECIFICATION STATEMENTS".

CENFOR 3-12 March 1970

3.5. MATHEMATICAL NOTATION

Symbols seen frequently in statistical problems are :
- a sum of numbers is desired

j] - a product of numbers is desired

I - the factorial is desired, i.e. if a number is
given as 5' the product of 5*^*3 , 2 , 1 is the
factorial.

These symbols may be written with an index with ranges as
in the example below:

n
1

X.

1=1

which can be interpreted as "add all those values in the
array X whose subscripts are between 1 and n inclusive."
If the subscript i were set to some other value, then the
range would begin wherever specified.

Other examples are :

a) Derive the sum of the squares of n values in array X.
beginning with X(l) and including X(n).

n

X 2 = X(l) 2 + X(2) 2 + X(3) 2 + X( n ) 2

i=l

b) Derive the sum of the products of n values in the
arrays X and Y.

n

s«

i=l

c) Square the sum of n values in array Y.

For an understanding of how these symbols may be interpreted
in FORTRAN programs read chapter 4 (The DO Statement) ana see
the example in 5.8.12.

4. THE DO STATEMENT

March 1970

CENFOR U- 1

4.1. DO

The DO statement allows the programer to construct a program
loop. In other words, it causes the subsequent line(s) of the
program to be repeated a specified number of times — incre-
menting or decrementing a certain value for each execution.

The first statement in the range of a DO must be one that
can be executed. It is permissible for the range of one DO
(the outer DO) to contain another DO (the inner DO).

The processor is provided with the following information for
each DO:

a) the label of the last statement in the group to be
repeated

b) a control variable representing the loop counter and
assigned the initial value

c) the initial value for the loop counter (par l)

d) an upper limit or maximum value which is not to be
exceeded by the loop counter (par 2)

e) an increment value by which the loop counter is to be
modified after each execution (par 3) — this value
must not be a zero.

The general form of the DO statement is as follows:

pari , par2 , par3
DO label V = M, N, I

where label is the label reference of the last statement in the
loop, V is the variable of the loop, M and N are the minimum and
maximum value, respectively, taken on by V, and I is the incre-
ment index. If I is omitted, the increment is assumed to be 1
or -1 if parl> par2 and both are integer constants.
For example,

DO

50
label

I
Control
variable

1,
Initial
value

10
Upper
limit
Value

,1

Increment

value

loops ten times from this statement to statement number 50,
incrementing I, by one each time.

CENFOR A- 2 March 1970

4.1. DO (Continued)

The parameter values may be Integer constants, a parameter vari-
able or nonsubscripted integer variables. If integer variables
are used, they must be defined prior to the execution of the DO
statement. The control variable and the parameter values must
not be modified by the programer during the execution of the D0-
loop; however, the value of the control variable (or index var-

Correct Example :

DO 50 I = 1,N

50 terminal statement

Incorrect Form:

DO 50 I = 1,N(J)

Subscripting is not allowed

Incorrect Form:

DO 50 1= 1,N+1

Expressions are not allowed. The value must be derived before
its use.

4.2. D0-L00PS

The set of statements which follows the DO statement including
the statement with the referenced label is called the range.
The DO statements plus the range is the DO loop. A DO loop
will be executed at least once, regardless of the index. The
value of the index is undefined if the DO loop terminates because
the index is exhausted. Throughout the range of the DO loop, the
index variable is available both in subscripts and as an ordinary
integer variable. The programmer, however, should not attempt to
change the value of the index variable.

If the DO loop index is exhausted, the index will no longer be
available for use.

For example: DO 10 J = 1,5,3,

10

L=P+J

March 1970

CENFOR 4- 3

4.2. DO-LOOPS (Continued)

the last value set into J has been lost and must be set to some
value again before it may be referenced.

To permit the DO statement to maintain control of the loop, the
terminal statement must logically be executable, and the terminal
statement must not be any of the following control statements :

a)

A GO TO in any form

b)

An arithmetic IF

c)

A DO

d)

A STOP

e)

A RETURN

However, if it is necessary to use one of the above statements
as the last statement in a DO loop, it may be done by following
the statement with a dummy statement called CONTINUE. The form
is : CONTINUE

The CONTINUE statement is then the terminal statement and hence
must be labeled as the last statement in the range.

4.3. NESTED D0-L00PS

Among the statements which may occur within the range of a
DO-loop is another DO statement. When this is so, the following
rules must be observed:

1. If the range of a DO-loop contains another DO-loop, the
range of the second must be entirely within the range of
the first.

2. The range of the inner DO-loop may, however, contain the

last statement in the range of the next outer DO-loop. Such
a set of DO-loops is called a nest.

CORRECT

P

2

DO
DO

INCORRECT

[tt

^CONTINUE
^D0
.CONTINUE
CONTINUE

DO
1)0
CONTINUE

CONTINUE

CENFOR 4- 4

March 1970

4.3. NESTED DO- LOOPS (Continued)

The following rule applies to transfers into the range of a
DO-loop:

Rule : No transfer is permitted into the range of a DO-loop
from outside its range.

Exceptions :

If control has been transferred from the innermost DO-range of
a nest of DO-loops to a section of the program which is not in
the range of another DO-loop, and which does not change any of
the indices or indexing parameter of the nest, then control
may be transferred back to the range of the innermost DO-loop
from which control was originally transferred. A transfer
from an inner DO to an outer DO is allowed.

Correct Use

Incorrect Use

DO

60

— DO 50
50 terminal
60 terminal

Correct Use

DO

10

^~

DO

20

1 —

DO

20

1 20

terminal

1 —

DO

10

10

terminal

DO

DO

10

20

— 10 terminal
DO 30

— 20 terminal

— 30 terminal

Incorrect Use

GO TO 85
DO 56
GO TO 66-
D0 91

66 <

75
..91
-56

March 1970

CENFOR 4- 5

4.3. NESTED DO-LOOPS (Continued)

Correct Use of Extended DO-loop:
DO 50 I = 1,10,2

IF (expression) GO to 11 — > 11 A = B*C
A = B--C+3.14 GO TO 78

78 X = SIN(A)

50 CONTINUE

Note: An extended DO-loop can be executed only from within an
innermost nest. The correct and incorrect execution of an
extended DO is shown below

Correct

Incorrect

[

Note : Reference to a function or a subroutine within a DO-loop
is permitted from any point within the loop.

CENFOR 4- 6 March 1970

4.3. NESTED DO- LOOPS (Continued)

When an array containing more than one dimension is referenced
within nested DO-loops using the DO-indexes as subscripts, then
care must be exercised to achieve the desired results.

One complete cycle of the innermost loop is executed for every
execution of the next outer loop. For example, it is desired
to create row-totals and column-totals for a matrix N with six
(6) rows and 10 columns per row. At the Bureau of the Census
totals are usually displayed in the first row and first column
of printed tables. Various methods are used for developing totals.
Some programers merely leave enough room in each table matrix to
allow for row and column totals. A more sophisticated method is
to develop the individual tally cells required for each table and
to set aside one area wherin totals may be created for one table
at a time and reused as each succeeding table is prepared for
output. In any event, areas set aside for totals should be
filled with zeros before any summing occurs. In the example
below, row and column totals are a part of the matrix.

DIMENSION N(10,6)

DO 100 J=2,6

DO 100 1=2,10

100 N(1,J)= N(1,J)+N(I,J)

DO 200 1=1,10

DO 200 J=2,6

200 N(I,6) = N(I,6) + N(I,J)

This sequence of this coding is as follows:

1. Using J as a subscript for the row, and I as a subscript
for the column, add columns 2 through 10 to column 1.
Then increment J to the next row.

2. Repeat step 1 until cross-totals for rows 2 through 6 have
been created.

3. Using I as a subscript for the column, and J as a sub-
script for the row, add rows 2 through 6 to row 1. Then
increment I to the next column.

4. Repeat step 3 until all 10 columns have been summed.

The final result would be to create column and row totals in a
matrix in subscripted locations as shown:

March 1970

CENFOR 4-7

TOTALS

TOTALS

1,1

2,1

3,1

4,1

5,1

6,1

7,1

8,1

9,1 10,1

1,2

2,2

3,2

4,2

5,2

6,2

7,2

8,2

9,2 10,2

1,3

2,3

3,3

4,3

5,3

6,3

7,3

3,3

9,3 10,3

1,4

2,4

3,4

4,4

5,4

6,4

7,4

8,4

9,4 10,4

1,5

2,5

3,5

4,5

5,5

6,5

7,5

3,5

9,5 10,5

1,6

2,6

3,6

4,6

5,6

6,6

7,6

8,6

9,6 10,6

4.4

MATERIALIZATION OF THE INDEX VARIABLE

If the index of the DO is used within the range of a DO-loop
(except as a subscript) then the storage location associated
with the index variable will contain the current value of the
index variable throughout the range of the DO-loop.

The following uses of the index variable will cause materializa-
tion to occur. New terms below will be explained in chapters 6
and 7.

1. The occurrence of the index variable other than as part
of a subscript.

2. A CALL statement to an external subroutine and the index
variable is in COMMON.

3. A control statement referencing a statement outside of
the range of the DO-loop.

4. A reference to an internal subprogram and the index variable
is global.

5. A reference to an ABNORMAL function, and the index variable
is in COMMON.

6. A reference to the statement function and the index variable
is in COMMON.

4.5 Frequent Uses of a D0-L00P

One of the most frequent uses of a D0-L00P is to reference
various elements of an array. As the index of a DO changes,
the value of the subscripts may also be changed. For example,
if an operation is to be performed on the first three elements
of an array, the index may proceed from 1 to 3 to pick up those
elements, but not the others.

10

DO 10
A(I)

I = 1,3
= 2*A(I)

CENFOR 4- 8 March 197 °

The first three elements would be doubled, while the remaining
ones are unchanged. The loop is equivalent to the execution
of the statements

A(l) = 2*A(1)

A(2) = 2- ;; "A(2)

A(3) = 2*A(3)

The same results could be obtained by starting with the third
element and working in descending order.

DO 10 I = 3,1

10 A(I) = 2*A(I)

This is equivalent to the following statements :

A(3) = 2*A(3)

A(2) = 2*A(2)

A(l) = 2*A(l)

If a jump instruction transfers control outside the range of
a DO-loop, then the storage location associated with the index
variable will contain the value of the index variable at the
time the transfer occurred.

DO 10 1=1,5

K = 1+1
IF (K.EQ.2) GO TO 15

10 CONTINUE

15 J = J* I

The variable "I" will contain the value 1 when control is transferred
on the first execution of the D0-loop.

March 1970

CENFOR 4- 9

4.6. Exercises Using The DO INSTRUCTION

1. Write instructions to move contents from locations 1-20
in TABCO to the corresponding locations in TABST.

2. Write a DO-loop to make a count of all the numbers greater
than 10.0 in a 1000-number array called A.

3. Use a single DO-loop (a single index) to clear an array
called RUST (100 locations) and an array called MARK (100
locations) to binary zeros.

4. Write a program to set each value of an array called
INDEX equal to the order of that value in the array
(that is, INDEX (l) = 1, INDEX (2) = 2, etc.). The INDEX
has a total length of 2000 numbers.

5. An array called BOOZE contains 500 numbers. Move the
contents of locations 1-250 into locations 1-250 in an
array called GIN and the remaining 250 numbers into
positions 1-250 of an array called VODKA.

6. An array called R0X has 200 numbers. Write instructions to
determine number of positive numbers, number of negative
numbers, number of zero numbers.

CENFOR 4-10 March 1970

Exercises Using the DO INSTRUCTION (cont.)

7. An array called FAN contains 100 numbers. Using a built-in

function, compute the square root of each number, and store it
in the, corresponding location of an array called RUTE.

Twenty (20) numbers are stored in an array called ORDER. Reverse
the order of the numbers — i.e., place them in reverse order in
the same array .

9. Write a DO-loop to copy the contents of an array called A into
an array called B, both of which are 1000 numbers long, placing
the numbers in the reverse order to that which they occupied in
the original array. That is, B(l000) will contain A(l), B(999)
will contain A(2), etc.

10. An array of numbers called A contains 1000 numbers. Find the
largest number and store it at BIGA. Find the element number
and store it at BIGB.

11. Two one-dimensional arrays named X and Y contain 50 elements
each. A variable named XS is known to be equal to one of the
elements in X. When equality is found between XS and an ele-
ment in X, pick up the corresponding element in Y and place it in
the variable YS.

March 1970 CENFOR 4-11

4. 6. Suggested Solutions to Exercises

Note ; It is assumed that all arrays are dimensioned prior to
use and summary cells are cleared to zero.

1. DO 10 J=l,20
10 TABST(J) = TABCO(J)

2. DO 20 J = 1,1000
IF (A(J)-10.0)20,20,
N = N + 1

20 CONTINUE

3. DO 30 J = 1,100
RUST(J) =

30 MARK(J) =

4. DO 40 I = 1,2000
40 INDEX(I) = I

5. DO 50 K = 1,250
GIN(K) = BOOZE(K)

50 VODKA(K) = BOOZE(K+250)

6. DO 60 M = 1,200
IF (ROX(M)) ,20,30
NEG = NEG+1

GO TO 60
20 NZERO = NZERO+1

GO TO 60
30 NPOS = NPOS+1
60 CONTINUE

CENFOR 4--12 March 1970

Suggested Solutions to Exercises ( cont . )

7. DO 70 N = 1,100

70 RUTE(N) = SQRT (FAN(N))

8. DO 80 I = 1,10

M = ORDER (21-1)
ORDER (21-1) = ORDER (i)
80 ORDER (I) = M

9. DO 90 L = 1,1000
90 B(1001-L) = A(L)

10. BIGA = A(l)
BIGB = 1

DO 10 K = 2,1000
IF (A(K).LT.BIGA) GO TO 10
BIGB = K
BIGA = A(K)
10 CONTINUE

11. DO 100 J = 1,50

IF (X(J) - XS) ,200,
100 CONTINUE

c If the loop terminates without finding equality,
c then an error condition exists
200 YS = Y(J)

5. FORTRAN I/O

March 1970 CENFOR 5- 1

A read statement controls the transfer to memory of information
from an external source. (At Census, magnetic tapes are used as
input to FORTRAN programs.) If the original data is card input,
a service routine is used to place the data on tape. This routine
is called CENSER, with option CT (Card-to-tape function). If the
input data was produced in a previous run by a formatted write
on unit -3, then the data may be read on unit 5 with a formatted

READ( 5, label) name -, , namep, name., ....

label refers to the label of a FORMAT statement which informs
the program how to pick up fields of information and how to
handle each one. Name is a variable, array, or array element
name into which the data will be placed. The 5 is fixed as the
unit number which is usually used for reading formatted data.

An example of a READ statement is :

20 FORMAT (I6,3F12.2)

The action taken by this read is to convert the first six characters
of input to an internal binary form as an integer number, placing
the result in the location INT. The next 12 characters will be
converted to a floating point number, taking into account the fact
there are two decimal places. This result is placed in the REAL
location named XRAY. These steps are then repeated to place results
into COUNT and TOP. The 3 causes the floating point format to be
used 3 times before going to the next format.

In a formatted READ, the FORMAT specifications are interpreted
until the READ list is completely filled with data. If necessary,
the FORMAT is rescanned and another record is read with each
rescan. See Rescanning, 5.4-4-. for the rule to determine the
starting point.

5.1.2. NOTE ON METHOD TO DETECT END-OF-DATA ON TAPE

It is often the desire of the programer to do something special
after all the data has been read in. If no indicator is checked
by the programer, the FORTRAN procedure terminates the program
when an end-of-tape condition is detected. Therefore, it has
been the practice at Census to create a record of all 9's or
other sentinel as the last data record. A check for this special
record can be made after each READ. When it is detected, the pro-
gramer may then perform any action desired before terminating
his program.

CENFOR 5- 2 March 1970

5.1.3. FORMATTED WRITE

A WRITE statement controls the transfer of information from
storage to a peripheral device. (At Census, magnetic tapes are
used as output.) If it is desired to print the output, a
service routine is used. This routine is called CENSER, -and
the option to specify is TP (Tape-to-print function, Lion
External Format). Unit 6 is used at Census for formatted
writes which are to be printed with a maximum of 128 characters
per line. Unit -3 is used to produce a tape which may be read
in as input to a subsequent program and the output consists of
80 character card images or 14 word records. The form of the
FORMATTED WRITE is:

WRITE(Unit, label) name-,, name ? , name-....

where label refers to the label of a FORMAT statement which
informs the program how to handle each field of data it
picks up from the variable specified in the name list.

In a formatted write, the FORMAT specifications are interpreted

until the WRITE list is completely exhausted of data. If

necessary, the FORMAT is recanned and another record is written

to correspond with the rescan. See 5. U» 4-. for the rule to

determine the starting point.

EDTCPY (14.8.) should be used to prepare a tape for off-line printing.

5.1.4. CONTROL OF PRINT FILES

The first character of a printer record, produced by the
interaction of a WRITE and a FORMAT statement, does not appear
on the printed output page; it is used to control line spacing
before printing.

FORTRAN provides an interpretation of four carriage control
characters :

blank (lHb) or(lX) Print the record on the next

consecutive line.

(1H0) Print the record on the second

consecutive line.

1 (1H1) Print the record of the top of

the next page.

+ (1H+) Print the record on the current

line; this provides a means of
writing two or more records on one
line. When using the +, two or
more characters should not be
printed in the same position. Spaces
may be used in those positions where
over printing is not desired.

March 1970 CENFOR 5- 3

5.1.4. CONTROL OF PRINT FILES (Continued)

If the first character of a print record is not one of the
above, the action taken is unspecified and usually erratic,

It is a good practice to specify an H field descriptor at
the start of a FORMAT statement for each printer record.

5.1.5. READ AND WRITE NAME LISTS

There Is a one-to-one correspondence between the VARIABLE
names specified in a basic READ or WRITE statement and the
data fields to be transferred into these variables. This
correspondence is established by associating a name and a
field starting with the leftmost position and progressing to
the right.

Unlike a variable name and an array element name, an array
name implies all the elements in that array and, therefore,
will be associated with more than one field.

EXAMPLE :

DIMENSION GRUP(3),X(20)

98 FORMAT (5F6.1)

Assume the input has 5 fields of data each containing 6
digits with 1 decimal place. The fields contain 5.6, 78.0,
3.2, 3. 4 , and 3.5. Then after the execution of the above
READ values are in the following:

A = 5.6

XU) = 78.0

GRUP(l) = 3.2

GRUP(2) = 3.4

GRUP(3)"= 3.5

A value may be read into a variable and that value used as a
subscript to a name to inform the program where to place data.

Example :

INPUT DATA f~5 875 15 2~7l

72 FORMAT (II, F6.1, 16, F6.l)

CENFOR 5- 4 March 1970

5.1.5. READ AND WRITE NAME LISTS (Continued)

Name I is being assigned a value of 5 ', thus the names
BLUB(I) and X(l) in the list become BLUB(5) and X(5)
respectively. After execution, the following variables will
contain values.

I

= 5

BLTJB(5)

= 8.0

C

= 15

X(5)

= 2.1

5.2. IMPLIED DO

specifying names previously discussed, may also include an
implied DO list. This is used in operations involving arrays.
An array name in a list causes all the elements of the array
to be transferred. An implied DO allows selected sections of
an array to be transferred. The implied DO notation is similar
to the DO statement, but it does not require the word DO and a
terminal statement. The form of the implied DO specification
is :

i = par-,, par 2 , par,,

where i is the subscript variable

par., is the first subscript value

par,-, is the terminal subscript value

par„ is the increment for the subscript

An implied DO list includes the specification and the names of
the arrays (with a subscript (s)) to be operated on. The entire
list must be enclosed by parentheses. For example, if 15 ele-
ments are to be transferred from a one dimensional 100 element
array named SAM, the notation appears as follows:

(SAM(I), I = 10,24,1)

An example of the notation for transferring 25 elements of a
two dimensional array is as follows:

((SAM(I,J),I = 1,5,1), J = 1,5,1)

In a basic statement such as READ, an implied DO may appear as
follows :

READ (5,30) AL,INT,(SAM(I),I = 15,24,1), J,K

March 1970 CENFOR \$- 5

5.2. IMPLIED DO (Continued)

The transfer of information occurs in the following sequence:

1 AL

2 INT

3 SAM(15)

4 SAM(16)

12

SAM

13

J

U

K

General forms of implied DO's are as follows:
One-dimensional form:

(name, (i), name ? (i) , . . . , name (i), i = par,, par~, par~)
Two-dimensional form:
( (name, (JL,J) , name ? ( i,J) , . . . . , name (i,J), i = par,, par ? , par.,),

J = par^, par^, par' )

Three-dimensional form:

( ( ( name 1 ( i , j , k ) , name 2 ( i , j ,k ) , name n ( i , j , k ) ,

i = par 1? par 2 , par^), j = par^, par' 2 , par 1 ^),

k = par", , par 1 ' , par'' )

An example of implied DO notation using one subscript is as
follows :

DIMENSION D(8)

This is the equivalent of writing:

CENFOR 5- 6

March 1970

5.2. IMPLIED DO (Continued)

An example using two subscripted names in an implied DO is as
follows :

READ( 5y 65) D(2), (B(I+2),C(l,l),I = 2,6,2)

The transfer of information occurs in the following sequence :

1

D(2)

2

bU)

3

C(2,l)

4

B(6)

5

C(4,l)

6

B(8)

7

C(6,l)

Warning: It is illegal to use a variable in an implied DO
range to define a parameter in an implied DO. For instance, the
following is an incorrect notation:

The value associated with J would change every time the loop
was executed. This is an attempt to redefine the DO parameter J
and is illegal.

5.3. UNIT Assignments for FORTRAN READ/WRITE Statements

Type of Data

*card image input
"card image output
Sprinter image
unformatted
unformatted
unformatted
unformatted

Unit Number

Tape Name

Channel

Tape Type

5,-1

MTO

IIIA

-3

PNCHT

MTO

IIIA

6,-2

PRNTT

MTO

IIIA

1-4

AA-DA

MAO

IIA

7-9

EA-GA

MAO

IIA

10-16

AT-GT

MTO

IIIA

17-18

AC-BC

MCO

4C

"card images contain 80 accessible characters
-x--x- printer images contain 128 accessible characters including the
carriage control character

Note: Census programers should restrict themselves to the use
of READT, PNCHT, and PRNTT tapes when using FORTRAN
READ/WRITE statements because of differences in tape formats,

March 1970 CENFOR 5- 7

5.4-. FORMAT STATEMENT

The FORMAT statement is used to describe how the information is
arranged on input or is to be arranged on output. For each value
transmitted there must be a corresponding field specification which
lists the kind of information the field contains (in terms of
its internal representation), and what it "looks like" externally.
A general form of the FORMAT statement follows :

label FORMAT (descriptor.,, descriptor,-,, ..., descriptor )

where LABEL is the numerical statement label referred to by the
READ or the WRITE statement, and the DESCRIPTORS are the field
specifications for the individual pieces of data. The first
piece of data takes the format of DESCRIPTOR , the second,
DESCRIPT0R 2 , etc.

For example :

10 FORMAT (I6,F6.2)

reads in a piece of data as a six-character integer and stores
it in M; then it reads the second piece of data as a six-character
fixed point number with two decimal places and stores it in XNUM.
However, this statement also has additional features which pro-
vide conveniences to the programer. The FORMAT statement is
referenced by the statement number of either the READ (UNIT, format
designation) List, or WRITE (UNIT, format designation") List state-
ment. The FORMAT statement provides the following descriptive
information or specifications:

a) description of the field or fields of data to be transferred

b) convenient notation for describing groups of similar fields

c) convenient notation for controlling the transfer of records
of data

- ;; "Note: In lieu of a FORMAT statement, the formatting specification
may be contained in an array. A pair of left and right parentheses
should bound the specifications. The array may be filled by a
previous READ before its reference in the object program.

CENFOR 5- 8 March 1970

5.4.1. FIELD DESCRIPTORS
GENERAL RULES:

1. A letter (I,F,E,D,G,Q, L,A,H, or X) should be Included to
designate the kind of information and how it is to be
handled. (See 5.4-. 5.)

2. There should be a number to designate how many characters
or card columns are in use. This will be referred to as w.

3. On input a sign, if any, must be the first non-blank
character of a field. The use of a plus sign is
optional; if no sign appears, the number is considered
positive. Blanks are taken to be zeros.

4. On output , the number will appear at the right of the output
field if more character positions are specified for the
field than there are characters in the number. If too few
characters are specified, the output area will be filled
with asterisks.

5. In all types, except H and X, it is permissible to specify
that the same field specification applies to several
successive fields, by writing a repetition number referred
to as r in front of the field specification.

6. If the programer would like to change the number of
decimal places of E, F, or G formatted data, he may employ
a scale factor within his formal statement. The editing
codes of the formes E, F, and G may be written in the form
pPrEw.d where the Ew.d is the normal field specification,

the r is the repetition factor, and the p is the scale factor,
a signed integer constant. This form may be used for both
input and output.

In printing, the appearance of a scale factor p has the
following effect:

a. List values associated with the field of the form

rFw.d are multiplied by 10 p before printing. A nega-
tive scale factor will move the decimal point to the
left.

Example :

VALUE SPECIFICATION PRINTING

12764.31613 -2PF12.7 127.6431613

2PF12.3 1276431.613

March 1970

CENFOR \$- 9

5.4.1. FIELD DESCRIPTORS (Continued)

6. (continued)

b. A list value associated with a field of the form

rEw.d is printed with its mantissa multiplied by 10 ,
and its exponent decreased by p. In other words,
the field is changed in form, but not in value, on
printed output. A scale factor has no effect on input
with an E specification.

EXAMPLE :
VA LUE
-12764.31613

SPECIFICATION
E13.6
2PE14.6
-3PF7.2

PRINTING
-0.127643E05
-12.764316E03
-12.76

7. Whenever a scale factor is written with a D,E, or F field
specification, it automatically applies to all succeeding
D,E, and F field specifications, until some other scale
factor is encountered. If a given scale factor is applied

to one field specification only, the next field specification
must have a. 0P scale factor.

8. In the E,F, and G forms, there should be a number to
designate how many decimal places are in use. This will
be referred to as d.

9. Data to be treated as octal must be given real or integer
variable names. Internally, such data will be presented
as a 12 digit octal number.

10. Repetition of Groups of Editing Codes : If it is desired to
edit more than one group of elements of a List in pre-
cisely the same manner, and the corresponding groups of
editing codes would occur in succession in a FORMAT
specification, then it is possible to further shorten the
FO.RMAT specification. The group of editing codes to be
repeated may be written only once, enclosed in parentheses
and prefixed by an unsigned integer constant, n, indicating
the number of times repetition of the group is desired.

Example: FORMAT U(F12.1,E5.2) ) is equivalent to:

FORMAT (F12.1,E5.2,F12.1,E5.2,F12.1,E5.2,F12.1,E5.2)

CENFOR 5-10 March 1970

5.4.1. FIELD DESCRIPTORS (Continued)

11. Multiple Record Format Specification

If a group of editing codes is followed by a / (slash),
then the remainder of the record being edited is ignored
on input or filled with spaces on output, and the edit-
ing codes following the slash (if any) are used to edit
the next record.

Thus, FORMAT (3F9.2,2F10. 4/8E14.5) could edit a two-line
block of printing (two records), the first line of which
would have its editing controlled by the codes
3F9.2,2F10.4 and the second line of which would have its
editing controlled by the code 8E14.5. Entire records
may be ignored on input or blank (skipped) records may be
produced on output simply by writing consecutive slashes.

For example :

4122 FORMAT (8HASPIN IS,2E10. 5,2A6/6F7.2 /////)

used with a WRITE (6,4122) would produce a line controlled
by 8HASPIN IS ,2E10.5,2A6, a line controlled by 6F7.2 and 4
lines of spaces.

Note: If it is desired to skip n lines, then there must
be n+1 slashes.

March 1970

CENFOR 5-11

\$.4.2. TABLE OF EDITING SYMBOLS

SYMBOL EDITING ACTION

Internal External

I Integer variable to/from decimal integer

E Real variable to/from floating point

decimal number

floating point
decimal number

fixed point
decimal number

floating point or
fixed point
decimal number

D Double-precision to/from

F Real variable

G Real variable

to/f

rom

to/f

rom

EDITING CODE

Iw,rlw
Ew.d,rEw.d

Dw.d,rDw.d,
pPrEw.d

Fw.d,rFw.d,
pPrFw.d

Gw . d , rGw . d

0w,r0w
Lw , r Lw
Aw,rAw
wH
wX

w is width of field

d is number of decimals

p is amount of scaling by power of 10

P is scaling

r is number of repetitions

is decimal point to separate width of field and number of decimal
places

octal-digit

to/from

octal digit

L Binary bit

t/f

A 6-bit Character

to/from

6-bit character

H supplied by FORMAT

6-bit character

X not stored

Skip/Space

Notation:

CENFOR 5-12 March 1970

5.4.3. OBJECT TIME FORMAT STATEMENTS

If the programer does not know the field specifications of the
data when he writes the program, it is possible to input these
specifications with the other data. To do this, an array to
hold the format specifications in the form of alphameric data
must be established. At object time, these formats are read
into this array, and the formats are then referenced by name
in the READ or WRITE statement.

For example, if the format for the output of four elements,
I, J, K, L, differs with every set of data, a unique format
enclosed in parentheses may be contained on the first data
card as follows :

(I1O,I16,1PE20.8,OPE16.2)

FMT is dimensioned as a one-dimensional array with five
elements, which will be considered as alphameric variables
and therefore can hold 30 characters (five "words" of six
characters each) to hold this information. This variable FMT
will then contain the format information and may be referenced
like a format label.

DIMENSION FMT(5)
209 FORMAT (5A6)

WRITE (6,FMT)I,J,K,L

March 1970 CENFOR 5-13

5.4.4. RESCANNING

If the number of items mentioned in a READ statement is larger
than the number of specifications in the FORMAT statement, it
will return to some portion of the FORMAT statement to find the
remaining specifications.

For example :

FORMAT (l6,F6.l)

will associate A with 16, B with F6.1 and then return to the
beginning of the FORMAT statement to associate C with 16 and D
with F6.1. If more data were to be read, it would continue in
been filled.

One use of the rescan is to force the reading of several
records to fill an array. When the first scan of the FORMAT
is completed, a new record is brought in, and it is rescanned.
This continues until the array list is filled with data. For
example, it is desired to read six records, pulling off three
six-character fields from each one, to fill an array of 18 cells,

DIMENSION A (18)

10 FORMAT (3F6.1)

When a format must be rescanned when using a WRITE, the
rescan initiates a new output record. For example, the follow-
ing WRITE statement would create 20 records :

DIMENSION N(20)
20 FORMAT (16)
WRITE (6,20)N

If it were desired to create two records of 10 fields each,

20 FORMAT (1016)

It is possible to specify a special format for the first (one
or more) records and a different format for all subsequent re-
cords. This is done by enclosing the last record specifications
in parentheses .

CENFOR 5-14 March 1970

5.4.4. RESCANNING (Continued)

Excluding the rightmost parenthesis of the FORMAT
specification, the restart point is the left parenthesis that
matches the rightmost parenthesis. If an integer constant
for repetition immediately precedes the rescanning entry
point, it is also rescanned.

In the following examples, an arrow indicates the rescan
point.

FORMAT (F5.1,G20.10)

r

FORMAT (Fll.l, (I4,E10.2))

/

FORMAT (2 (Fll.l), U./E10.2)

FORMAT (2(E6.1,I4),3(I2,I4,E6.2))

t

FORMAT (2(E6.1,I4),3(F7.2,E5.1(I3,I2)))

t

FORMAT ((G5.1,I3),2(G6.2,F5.1,(I3,I2)),I4,P6.1)

If the end of a variable name list is reached but there remain
H, X or/ specifications, they will be processed before the
input-output operation is terminated.

If the name list is exhausted before the specifications, the
Input-output operation is complete.

March 1970 CENFOR 5-15

5.4-. 5. SPECIFIC INFORMATION RE EDITING CODES
5 . 4- . 5 . 1 . Iw

a. "I" means integer data is involved

b. The maximum value which can be read or written is
+ 34,359,738,367 (11 decimal digits plus sign)

c. Valid input characters for the field are:

Space or blank and the numerics 0-9.

A plus (+) or minus (-) sign is also acceptable
as the character preceding the first numeric
character.

d. On input, the value is converted to pure binary
and stored, right justified, in one computer word.
If the field width is greater than 11, then the
leading positions may only contain a sign or spaces
or blanks.

If the entire input field is blank, a value of -0
is stored.

e. On output, the value is converted from pure binary to
integer. If the value is negative, a minus sign (-)
will appear immediately preceding the most significant
digit. If the value is positive, no sign will appear.
If the field width is larger than required for the
value, the field will be filled out to the left with
spaces. If the field width is not large enough to
contain the value including (minus) sign, the field
will be filled with asterisks to indicate overflow.

The following examples show how each of the quantities
on the left is printed according to the format code 13:

INTERNAL VALUE PRINTED VALUE

721 721

-721 ***

-12 -12

568114 ***

#fo

-5 i-5

9 *#9

CENFOR 5-16 March 1970

5.4-. 5.2. Fw.d

a. The "F" phrase specifies that the next w characters are
to be interpreted as a fixed-point number. The data
may be either a real variable or one part of a complex
variable.

b. The w is the total number of characters which are to be
interpreted. The total field length reserved must include
sufficient positions for a sign (if one is used), a digit
to the left of the decimal point, and a decimal point.

It is illegal to format a number as F6.6 with the entire
number following the decimal point.

c. On input, valid characters are: spaces or blanks, one
decimal point per field, and the numerics 0-9. Preced-
ing the number, a positive (+) or a negative (-) sign
is also acceptable. If no sign is present, the field
is assumed to be positive. Spaces or blanks are inter-
preted as zeros. If the decimal point is present in the
input field, it overrides the "d" in the specifications
when they contradict one another. If the decimal point

is not present, then the editing code "d" determines where
it will be placed.

do If the entire field is blank, a value of -0.0 is stored
in the memory.

e. On output, if the field is negative a negative sign (-)
will be printed preceding the most significant digit.
If the value is positive, no sign will appear. If the
decimal portion of the number has fewer digits than the
specification requires, it will be filled on the right
with zeros. If the entire field width is larger than
necessary, it will be filled on the left with blanks.
If the field width is not large enough to contain the
number including the negative sign, the field will be
filled with asterisks (*) to indicate overflow.

f. When the scale factor is used with the F format for input,
the input value is multinlied by 10~ n durinp conversion.
For example, a scale factor of one will cause a card value
of 2.367 to be stored in the computer as .2367.

March 1970 CENFOR 5-17

5.4. 5.2. Fw.d (Continued)

e. (Continued)
Examples of F type input data with format F6.2:
#12.17
#1217
+12.17
-12.17
+1217
-1217
+1.217
#1.217

The following examples show how each of the quantities on
the left is printed according to the format code F5.2:

Internal Value Printed Value

12.17 12.17

-41.16 *****

-.2 -0.20

7.3542 #7.35

-1. -1.00

9.03 #9.03

187.64 *****

. 0.00

CENFOR 5-18 March 19?Q

5.4.5.3. Ew.d

a. "E" specifies conversion between an internal real value and an
external number written with an exponent. The total number of
characters in the external medium is w, including signs,
decimal point, E, exponent and any blanks.

b. On input the use of an actual decimal point is optional;

if it is supplied in the field, it overrides d. The exponent
part of the field takes the general form E+ee, as in a float-
ing point constant in a statement. However, several shortcuts
are permitted. A positive exponent may appear with the +
omitted or replaced with a blank, that is, E ee or Eee. If
the first digit of the exponent is zero, it may be omitted.
If the exponent is written with a sign, the E may be omitted.
Thus all of the following are permissible and equivalent
forms for the exponent plus 2 :

E+02,E02,E 02,E+2,E2,+2

The exponent must be at the extreme right of a field to
convey the correct meaning.

All of the following data fields convert to the same internal
number if read is under control of E14.7, but it must be
remembered that an actual decimal point overrides d in the
field specification:

+ 1.2345678E03

A

12345678. E-4

A

1234.5678E0
/\

+ 0.12345678+4

c. On output the number will normally appear in the form + .nn
....E+ee (except that plus signs are replaced with blanks),
in which the number of places after the decimal point is
specified by d. A scale factor has no effect on input with
an E specification. On output the effect is to multiply

the "fractional" part by 10 s and to reduce the exponent by s.
The scale factor may be positive or negative. If the value
is zero, no exponent will appear.

The following examples show how each of the quantities on
the left (the internally stored real number) is printed
according to the format code E8.3:

INTERNAL VALUE PRINTED VALUE

1567.23 .156E04

-42.35 .423E02

6.3356 .634E01

7.1 .710E01

-.2 -.200E00

-25.3 -.253E02

March 1970

CENFOR 5-19

5.4-. 5.4-- Gw.d

"G" is a generalized real conversion which, on output (WRITE),
includes the capabilities of both E and F conversion codes.
On input (READ), a Gw.d is the same as Fw.d.

On output, the code Gw.d attempts to transmit a real datum of
absolute magnitude N in a Fw.d mode , as per the following
rules:

If the absolute magnitude

then the effective output

of N is

code is

0.11N<1

F(w-4).d,4X

1.0£N^10

•

F(w-d).(d-l),4X

•
•

10d-2£ N <10 d - 1

F(w-4).1,4X

10d-l<N<10d

F(w-4).0,4X

If the absolute value of N is outside this range, the effective
editing code is Ew.d.

For example: The editing code is G12.5 and the item is
+125346.1. The item falls outside the limit set by 10 5 and
therefore will be printed with the code E12.5, resulting in
J\$.12535E+06. If the editing code had been G14.7, the effective
editing code would have been F10.1,4X resulting in the number
\$125346. 1J\$J\$.

To insure correct conversion to the Ew.d format when required,
the "w" of the Gw.d editing code must be at least 7+d for nega-
tive numbers. Also note that the effect of a scale factor is
suspended when the absolute magnitude of the number falls
outside the range shown in the table.

CENFOR 5-20 March 1970

5.4-. 5. 5. Dw.d

Dw.d is described as Ew.d except that the list item is regarded
as DOUBLE PRECISION. (Two locations are taken.) See the
description of a DOUBLE PRECISION constant.

Example: D16.4-

5.4-5.6. FIELD DESCRIPTOR FOR A COMPLEX NUMBER

A complex value is represented by an ordered pair of real
numbers. Therefore the rules described for handling real value
using the E, F, and G conversions apply. The only difference is
that one name appears in the name list of a basic statement for
each pair of numbers; each member of the pair requires a field
descriptor.

Example: 2F10.5

5.4.5.7. Ow

This specification indicates that the field is to occupy w
print positions, that the value of the list item is to be
interpreted as a 12-digit octal number, and that the quantity
is to be printed as an octal number, right- justified in the
field. If the field width is less than or equal to 12, then the
w least significant digits will appear. If the field width is
larger than 12, then it will be filled out to the left with
blanks. Leading zeros will be printed if the field width
allows. The "0" specification is considered typeless; there-
fore, any type list may be used.

Example 1: Three fields are to be printed.

10 FORMAT (3012)

WRITE (6,10)(A(I),I = 1,3)

Example 2: Three fields are to be read.

20 FORMAT (06,04,02)

The three cells of N now contain leading
zeros and the number of octal characters
described in the format.

March 1970 CENFOR 5-21

5.^.5.8. Lw

The "L" phrase specifies that the data will be a logical
constant. If w is specified for output and the value of the
logical list item is .TRUE., the rightmost position of the
field with length w will contain the letter "T". The "F"
is printed instead if the value Is .FALSE.. On input, the
field width is scanned from left to right for the first
letter "T" or "F" and the value of the corresponding logical
list item is set to be .TRUE, or .FALSE., respectively. All
other characters of the external input field are ignored.

5.4.5.9. wH

For input or output of alphameric information, two kinds of
specifications are available: One which keeps the alphameric
information only in the FORMAT declaration's outside list,
called the Hollerith specification, and another which enables
a variable name to be given to the alphameric information,
by means of the corresponding inside list, called the A speci-
fication.

The general format for the Hollerith specification is

wHXXX. . .

where w is the integer number of characters which immediately
follow the "H", and the "X's" denote the characters which form
the information.

For example :

10 FORMAT (32H THIS IS ALPHAMERIC INFORMATION.)

The few blanks and the period are counted giving a total of 32
characters.

On input, it is assumed that there already exists old alphameric
information, and the number of characters specified will be
read into the FORMAT list to replace the old information exactly,
Thus, for example, if on a punch card appears

Z\ THISA IS ANEWA INPUT£,INF0RMATI0N.

10 FORMAT (32H THIS IS ALPHAMERIC INFORMATION.)

CENFOR 5-22

March 1970

5.4.5-9. wH (Continued)

the result would be to change the format declaration 10 to

10 FORMAT (32RATHIS IS NEW INPUT INFORMATION .£)

for some future WRITE or other output statement. In this way,
headings on tables can be changed for successive printouts.

When this edit code is used for output, the editing code is
independent of the variable list in a corresponding WRITE
statement. The characters following the H are picked up and
become a part of the output record.

The first character should be a carriage control character for
the printer and is not printed. The following table indicates
the effect of the carriage control:

CHARACTER 1

ACTION BEFORE PRINTING

Blank
(ZERO)
1

+

Single Space
Double Space
Suppress Spacing

Note:

An additional feature in FORTRAN V is the use of single quotes
to surround the data thus replacing the wH and avoiding the
necessity to count characters.

March 1970 CENFOR 5-23

5.4.5.10. Aw

The "A" format phrase specifies that the next w characters of
data are to be interpreted as a string of Hollerith characters.
Differing from the "H" format phrase, the information itself
is stored in an address and hence has a name in the correspond-
ing inside list. The name of the alphameric variable may be of
any type. However, if there is to be any manipulation of these
data in the program, the arithmetic used in the manipulation
will be of the type specified by the variable's name. Since
only six characters can be stored in a single word, the number
of characters must not be greater than six. If a larger string
of characters is required, then successive specifications must
be used in the outside list, and the inside list of names for
the information can be made a subscripted variable. For
example, suppose we desired to read in

A THISAIS/ULPHAMERICAENFORMATION

the FORMAT declaration would be

10 FORMAT (A6,A6,A6,A6,A6,A2)

or
10 FORMAT (5A6,A2)

Similarly, for output, the information in the contents of the
corresponding addresses of the inside list is printed out.
For example , if the PRINT statement were

WRITE(6,10) (ALPHA(I), 1=1 ,6)

then the contents of the first six addresses of the array ALPHA
would be printed out as alphameric information.

In input, if the total field width is equal to 6, then the 6
characters will be picked up and put into one computer word.
If the total field width is greater than 6, then the rightmost 6
characters will be picked up and put into one computer word.
If the total field width is less than 6, then "w" characters
will be picked up and left- justified in one computer word with
Fieldata space fillers on the right.

On output, if the total field width is equal to 6, the 6
characters in memory will be printed. If the total field width
is greater than 6, then the 6 characters in memory will be
right- justified and printed, with spaces filling the leftmost
areas. If the total field width is less than 6, then the "w"
leftmost characters in memory will be printed.

If the list item is DOUBLE PRECISION, or COMPLEX, a descriptor
A12 may be used in order to obtain a field of length 12.

CENFOR 5-24 March 1970

5.4.5.11. wX

This specification indicates that a field, w in length, is
to be filled with blanks (on output) or ignored (on input).
This specification is independent of the list items. This
feature is used to skip characters on input and to insert
spaces on output.

5.4.5.12. SPECIAL NOTES ON REAL VALUE DESCRIPTORS E,F, and G

These three conversion codes do not distinguish between external
representations of real numbers for input of data. On the
formatted READ, any of the following data representations are
acceptable to the conversion codes E, F, and G.

12.34

1245

34E2

37+2

95.6E5

57 . 6D8

For output of data, the E, F, and G conversion codes indicate
a unique external form.

March 1970 CENFOR 5-25

5.5. TAPE POSITIONING STATEMENTS

There are three statements specifically for use with magnetic
tape. In each case the verb is followed by an integer constant
or variable designating the FORTRAN unit number.

5.5.1. END FILE t

This statement places an end-of-file mark on the designated
tape. Its primary use, from our standpoint, is to serve as a
signal to the off-line printer that no more valid information
follows .

5.5.2. REWIND t

This ■ statement returns a tape to its beginning. This step is
necessary, for instance, when a binary tape has been written
with intermediate results and we want to read the data back
into the computer. Tape cannot be read backward in FORTRAN, so
we rewind the tape and use a binary read to get the information.
A tape should be rewound each time before use because we cannot
know for sure that the tape is at its initial point, even though
it ordinarily will be. If by chance it is positioned somewhere
else, we will have no trouble in writing, but when we later
rewind the tape and try to read the information we have written
we will encounter tape area before the point at which we began
writing. Usually, there will be information on it from some
previous usage of the tape, and we will be in trouble.

5.5.3. BACKSPACE t

This statement backs up the specified tape by one "record."
A record, for our purposes, may be defined as the information
corresponding to one card or one printer line.

5.6. UNFORMATTED INPUT AND OUTPUT

When a given FORTRAN program writes a file to be processed by
another FORTRAN program, it is sometimes advantageous to use the
unformatted WRITE and READ. The units and lists specified conform
in all respects to those discussed for formatted WRITE and READ
statements. However, unformatted data appears on the external
medium in an unedited form. That is, no conversion takes place.
The entire list of variables, arrays, and array elements given in
an unformatted WRITE statement is transmitted to an external
device as a single logical record. It exits as a single input
record for an unformatted READ statement. Tape unit numbers
-1, -2, -3, 5 or 6 should not be used with unformatted reads.
The forms of the unformatted READ or WRITE are:

WRITE (unit) list

CENFOR 5-26 March 1970

5.7. PRINTING A FORMATTED TAPE

Because of the system used at Census, printing is not done on-line
at the time a program is executed. Instead, a service routine is
used to print an output tape in lieu of direct printing. CENSER,
option TP (tape-to-print function), is used. If the data to be
printed exceeds 100 blocks, then it is requested that the FORTRAN
formatted write not be used. The F0LI0N subroutines and Census
functions should be used, in that instance, to prepare a tape for
the Census off-line high-speed printers, which require BCD-XS3
characters . However, a service routine (EDTCPY) is available when
necessary to translate and copy a Fortran formatted tape to a IIA
tape which can be printed off-line using Board 3, Loop 4, single-
space.

March 1970 CENFOR 5-27

5.8. EXERCISES

5.8.1. When using a FORMAT statement, which type of the following
merely moves the data into an area without changing the
character(s)?

a.

15

b.

F7.2

c.

F5.0

d.

E10.3

e.

1PE10.3

F, E, G, A, I

5.8.2. Show how the given data values would be printed under control
of the field specifications stated:

0, 10, -587, 90062, 123456

0.0, 1.0, 16.77, -586.21, 0.04, 12.34

0.0, 1.0, 16.87, -12.32

0.0, 0.00072, 601000., -473., -0.0123

0.0, 10.0, 0.000076, 6780000., -627, -0.000456

5.8.3. Given that the values of three variables are as follows,
M = 12, X = 407.8, Y = -32.9

Show exactly what would be printed by

WRITE (6,107) M, X, Y
with each of the following FORMAT statements:

a. 107 FORMAT (1H#,3HM =tf,I3,3HX =tf,F6.1,3HY =tf,F6al)

b. 107 FORMAT

B I3/1H0,8HPRESSURE,6X,
C 11HTEMPERATURE/1H0 ,
D F7.1,9X,F6.1)

5.8.4. Four numbers are punched on a card; they are new values of
real variables named BOS, EWR, PHL, and DCA. Each number is
punched in 8 columns, the first beginning in column 1. Each
number contains a decimal point. Write READ and FORMAT

5.8.5. Repeat exercise 5.8.4., but assume that there is no decimal
point in the data. Treat the numbers as if there were two
decimal places.

5.8.6. Repeat exercise 5.8.4., but let each field occupy 14 columns
and a decimal point and an exponent appear in the data.

5.8.7. Given a WRITE statement,

WRITE (6,92) I,J,R,S
I and J are integer variables and R and S are real.
For each of the following, write a FORMAT statement that
could produce a line or lines with the given WRITE statement.

a . ^^-16^92017^16 . 82^437 . 89

b. ^^-16^92017^17.^^438.

c . J#tf-l6tfj#92017J\$0 . l6824Eb / 02b / b / . 43789Eb / 03

d . ^-16^92017^1 . 6824Eb / 01b / b / 4 • 3789Eb / 02

e . I=^-16^J=J^92017^R=^16 . 8#fe=&37 • 9

f. I=#J\$-16
1=^92017
R=J\$l6.8
S=)^437.9

CENFOR 5-28 March 1970

5.8.8. DATA is a one-dimensional array of at most 10 elements. A card
is punched with a value of N in columns 1 and 2 and with 1 to 10
elements of DATA in succeeding columns. The number of elements
is given by the value of N. Each number is punched with a deci-
mal point but no exponent, in seven columns. Write statements

5.8.9. Describe in words what card format and deck makeup would be
required for each of the following groups of statements to be
meaningful :

a. DIMENSION X(10)

69 FORMAT (10F4.0)

b. DIMENSION X(10)

70 FORMAT ( 12, 10F4.0)

c. DIMENSION X(10)

71 FORMAT (I2/10F4.0)

d. DIMENSION X(l0)

72 FORMAT (I2/(F4.0))

e. DIMENSION Y( 10,10)
READ (5,79) K, (Y(K, I) ,1=1,10)

79 FORMAT ( 12, 10F5.0)

f. DIMENSION Y(10,10)

80 F0RMAT(2I2,10F5.0)

g. DIMENSION Y( 10,10)
READ(5,81) M,N, ( (Y(l , J) , J-1,N) , I-1,M)

81 F0RMAT(2I2/(10F8.0))

h. DIMENSION Y(l0,10)

82 FORMAT ( 212, F10. 0,11)
IF (L.EQ.0) GO TO 83

5.8.10. Express the following numbers using the E format notation:

a. 10.00

b. .00000492

c. 100

5.8.11. Describe the contents of the printing resulting from:

12 FORMAT (lX,4I10/lX,40Il)

WRITE(6,12) (II, II = 1,4), ((11,11 = 1,10), JJ = 1,4)

March 1970 CENFOR 5-29

5.8.12. Calculate the sample mean, variance, and standard deviation for
n values (up to 250) punched one per card in the form XXX. X
beginning in column 1. Let the first card contain the number
of values which follow. Print the results. Use the formula:

o. n
Variance

2

= ^_ x i 2 - ( XZv

i = 1 i •- 1

n (n-1)

The standard deviation is the square root of the variance.

The sample mean is the sum of the values X. divided by the
number of values.

5-8.13. Prepare a program to compute simple interest for several years.
Read in values of principal, interest rate, and an upper limit
to the period. Calculate the amount at the end of each period
from 1 to the limit, printing out values of the period and the
amount. Prepare the following table.

PRINCIPAL XXXXXXX.XX RATE XXX. XXX

PERIOD

AMOUNT

X

XXXXXXXX.XX

it

it

it

it

it

ti

CENFOR 5-30 March 1970

5.8.1. A

5.8.2. a. 0, 10, -587, 90062, *****

b. 0.00, 1.00, 16.77, -586.21, 0.04, 12.34

c. 0. , 1. , 17. , -12.

d. O.OOOEOO, .072E-02,.601E06,-.473E03,-.123E-01

e. O.OOOEOO, 1.000E01,.760E-04,6.780E06,-6.270E02,-4.560E-04

5.8.3. a. M = 12X = 407. 8Y = -32.9

PRESSURE TEMPERATURE
407.8 -32.9

5.8.4. READ(5,50) BOS, EWR, PHL, DCA

50 FORMAT (4F8.0)

5.8.5. READ(5,51) BOS, EWR, PHL, DCA

51 FORMAT (4F8.2)

5.8.6.

>. READ(5,60) BOS, EWR, PHL, DCA
60 FORMAT (4E14.0)

5.8.7. a. FORMAT (217, 2F8.2)

b. FORMAT (217, 2F6.0)

c. FORMAT (16, 18, 2E13.5)

d. FORMAT (16,18, 1P2E12.4)

e. FORMAT (3H#I=, 16, 4Hb%T= ,16,
A 4Hb / b / R= ,F6.1, 4H^S= ,F6.1)

f. FORMAT (3H^I=, l6/3H#J=, 16/
A 3Hb / R=, F6.l/3Hb / S=, F6.1)

5.8.8. DIMENSION DATA (10)

80 FORMAT (I2,10F7.0)

5.8.9. a. Only one card will be read. Seven fields of data, four

characters each, will be read. If no decimal points
appear the number will be considered integer and converted
to real. If a decimal point appears, it takes effect.

b. One data card will be read. The first field of 2 digits
should contain a number which will be used as an index to
read in the numbers which appear in the card. Each number
occupies 4 columns.

March 1970 CENFOR 5-31

5.8.9. (continued)

c. Two cards will be read. The first card should contain
an integer in columns 1-2. The second card should
contain as many 4-digit numbers as the value of the
integer in the first card.

d. The first card read will contain a number which describes
the number of cards to follow. Each card will contain
one four-digit number.

e. One card will be read. The first two digits contain a
number which will be used as the first subscript of
the array Y. The second subscript of the array Y will
begin at 1 and end at 10. Thus the 10 values read in will
be placed into the array Y.

f. One card will be read. The fields K and M are given
values from the first two two-digit fields read in.
Then K becomes the first subscript of the array Y. The
second subscript I varies from 1 until it reaches the
value of M. Thus M values are read into array Y.

g. The first card contains values for M and N; N becomes
the limit for the second subscript which begins at 1. M
becomes the limit for the first subscript which begins at
1. As many values as necessary are read to satisfy the
requirements of the limits of the subscripts. Each card
will furnish 10 values. The J subscript varies the

most rapidly.

h. Each card contains four numbers. The first two fields
placed into I and J specify the subscripts to be used to
determine the address within the array Y to which the
third field will be sent. The fourth field goes to L.
In the event that the integer L is zero, the next card

5.8.10. a. .1E02

b. .492E-05

c . . 1E03

5.8.11. A 1 2 3 4
£123456789*123456789*123456789*1234.56789*

CENFOR 5-32 March 1970

C... SAMPLE MEAN, VARIANCE, STANDARD DEVIATION

DIMENSION X (250)
3 FORMAT (13)
U FORMAT (F5.1)

SUMX = 0.0

SUMSQ =0.0

DO 100 I = 1,N

SUMX = SUMX + X (I)

SUMSQ = SUMSQ + X (I) **2
100 CONTINUE

ZN = N

XBAR = SUMX/ZN

VAR = (ZN * SUMSQ - SUMX**2)/(ZN*(ZN-1.0) )

STDEV = SQRT (VAR)

WRITE (6,5) XBAR, VAR, STDEV
5 FORMAT (1H1, 3F12.2)

STOP

END

SIMPLE INTEREST FOR SEVERAL YEARS

1 FORMAT (F7.2, F5.3, 12)

2 FORMAT ( lQHlPRINCIPAL, F10.2, 6H A A RATE, F8.3)

3 FORMAT (15H A PERIOD A A AMOUNT )
U FORMAT (15, F12.2)

READ (5, 1) P, RATE, NL
WRITS (6, 2) P, RATE
WRITE (6, 3)
DO 10 N = 1, NL
ZN = N

A = P * (1.0 + ZN*RATE)
WRITE (6, U) N, A
10 CONTINUE
STOP
END

6. FUNCTION AND SUBROUTINE PROCEDURES

March 1970

CENFOR 6- 1

6.1. GENERAL

At various points in a program, operations may be required which
are identical, or almost identical to others (i.e., the operations
are the same but the data values are different). FORTRAN pro-
vides a method of writing these operations once in a general form,
and making them available as many times as necessary in a program.
Each such group of statements is called a procedure or subprogram.
Each procedure has a unique name by which it is referenced in a
program. Thus, by merely designating a name, procedures are
repeatedly executed by the program without the programer having
to duplicate the statements comprising the procedure.

As the FORTRAN language evolved, two basic kinds of procedures
developed — functions and subroutines.

There are three basic differences between a function procedure
and a subroutine procedure :

FUNCTION

■■ - - ' -

SUBROUTINE

A function requires at least one
argument (datum to be operated on).

A function reference (the function
name) appears as an expression or
as a term of an expression.

A function procedure returns a
single value to the point in an
expression which referenced it.

A subroutine may , or may
not have an argument(s).

A subroutine reference is
an independent statement.
See CALL statement.

A subroutine procedure may,
or may not, return infor-
mation to the referencing
program.

CENFOR 6- 2

March 1970

6.2. PROCEDURE ARGUMENTS

Arguments are data specified in the procedure reference which are
passed on to, or used in, the computational procedure. An argu-
ment may be a name, an expression, or a Hollerith constant. The
arguments are acted upon by the procedure to produce one or more
results. The arguments, in list form, must be separated by
commas, and the entire argument list enclosed in parentheses,

Arguments in the procedure are referred to as either dummy or
formal arguments. These arguments, consisting of symbolic names,
represent the data values or procedure names which can change
with each procedure reference made. The arguments to be trans-
ferred from the referencing statement to the procedure are called
actual arguments and the formal or dummy arguments are those
mentioned in the procedure. The actual and the dummy arguments
do not have to use the same names, but the actual arguments must
correspond in number, data type, and order to the dummy arguments
stated in the procedure. When the machine language program is
executed, the dummy arguments are replaced by the actual arguments
from the statement making the reference to the procedure.

The following table describes the general forms of actual arguments
and gives pertinent examples:

ACTUAL ARGUMENT FORM

EXAMPLE

Actual

Dummy

Variable Name

DIV

B

Array Element

ARRAY (1)

X

Array Name *

MATRIX

JDE

Expression

(S**2./3.0)+l

Z

Procedure Name **

SIN

Y

Hollerith Constant

6H total

HOLL

Statement Label ***

\$999

\$

**-

An array name passed on to a procedure requires that the pro-
cedure declare the array in a statement such as DIMENSION.

Procedure names used as actual arguments must be specified
"in an EXTERNAL statement in the calling program.

The "\$" as the i argument becomes the i RETURN to the
location specified in the formal argument.

March 1970 CENFOR 6- 3

6.3. THE FUNCTION

A function is a computational procedure which must be supplied
with at least one argument from the statement containing the
function reference. A function must return a single value to
the position in the statement where the reference occurred and may-
return additional values to be used in subsequent statements of
the program.

All functions, whether written by the programer or supplied by
the FORTRAN system are referenced in the same way.

Function names conform to the general naming convention.

6.3.1. REFERENCING A FUNCTION

A function is referenced in a program by merely including the
function name and the actual arguments in an expression in the
same manner that constants and variables are written in an
expression. For example, if the sine of a value is needed
as part of a computation, the sine function appears in a
statement as follows :

A = B + SIN (C)

where SIN is the symbolic name for the sine function and C is
the argument. Arguments for all procedures must be enclosed
in parentheses. Thus, the single value of SIN (C) is computed,
added to the value of B, and the result placed in the location
represented by A.

Additional examples of using functions are as follows :

A = ABS (B) + AMAX1 (C, D, E)

A = COS (B + C)

A = SIN (SgRT (B) - CBRT (C))

A = SIN (COS(TAN(SQRT(CBRT(A)))))

The expression in the above statement is called a nested function
reference. Nested functions are evaluated in the sequence start-
ing with the innermost parenthetical level to the outermost par-
enthetical level. Thus:

Let Tl = CBRT (A), then
T2 = SQRT (Tl) and

T3 = TAN (T2) and
T4 = COS (T3) and
A = SIN (T4)

CENFOR 6- 4 March 1970

6.3.1. REFERENCING A FUNCTION (Continued)

There are four kinds of functions available in thfi FORTRAN
language .

1. Built-in function (in-line object code generated by
the FORTRAN processor) .

2. Statement functions (programer created in one statement).

3. External functions (library function and function sub-
programs compiled independently ) .

4-. Internal function (a subprogram written by the programer
and compiled in conjunction with a main program or
another subprogram) .

Internal and external functions are both subprograms which are
referenced in an expression and return a single value to that
expression.

A list of functions generally supplied by FORTRAN are shown in
the tables BUILT-IN (Intrinsic) Functions and External Functions.
The programer need be concerned with these distinctions, intrinsic
and external, only if he uses a name which is the same as that of
a supplied function name.

The name of an external function used as the name of a
procedure subprogram written by the programer causes the sub-
program to replace the supplied procedure. Thus, the programer
may write his own sine or tangent procedure if he desires.

In addition to the FORTRAN supplied functions, there is a group
of CENSUS-written functions and subroutines which will be
described later.

It was found that the functions provided by FORTRAN were
insufficient to handle the programer 's needs. Therefore, a
method of allowing a programer to write function procedures
was introduced. The first is the statement function . This
allows the programer to write one statement specifying the
steps required for the evaluation of a function. For writing
a function procedure requiring more than one statement, a
function subprogram is used. Any function must specify at least
one argument and return a single value to the point of the function
reference in the program. For other kinds of required procedures
where arguments may or may not be necessary, and where data may
or may not be required, a procedure called a subroutine subprogram
is written. If the subprogram is compiled independently, it is

considered external. If it is included in an assembly as one
program unit with only one END card for both the main program
and all its subprograms, then it is considered to be internal.

March 1970 CENFOR 6- 5

6.3.2. STATEMENT FUNCTIONS

Statement functions are composed by the programer in the
following form and they must be prepared ahead of the first
executable statement.

f ( P, , P , . . . , P ) = e
12' ' m

where f is the function name; Pi are distinct, non-subscripted
variable names (formal arguments); and e is either an arith-
metic expression if the mode of f is arithmetic, or a logical
expression if the mode of f is logical. Normally the formal
arguments will appear in the expression e. Upon execution of
the statement function, they are replaced by the actual argu-
ments of the function reference. They may each be of any mode.
The actual arguments of a given reference must agree in number
and mode with their corresponding formal arguments. It is not
necessary that the formal argument names be distinct from any
other names. They are local to the statement function.

The function names must be unique. They must not be the same
as any variable name appearing elsewhere in the FORTRAN pro-
gram in which they appear. A function whose value is logical
must be declared LOGICAL.

The expression e may have subscripted variables appearing in
it. However, the formal arguments may not be subscripted.
The expression e may also contain references to previously
defined statement functions, built-in functions or external
functions .

References to statement functions may not contain statement
labels as arguments (i.e. F (\$5)).

The name f of the statement function must not appear in a
DIMENSION, EQUIVALENCE or COMMON statement in the main pro-
gram or subprogram where it is defined.

The type of the statement function is determined by the name
convention or by a previous type statement.

CENFOR 6- 6 March 1970

6.3.3. EXAMPLES OF STATEMENT FUNCTIONS

1. Non-executable statement function appearing before any
executable statement:

ROOT (A,B,C) = (-B+SQRT(B**2-4..*AC))/2.*A)

To use the function called ROOT:
ANS = ROOT (l6.9,R-S,T+6.9)+C0S(X)

2. Two statement functions to illustrate how a second function
may reference the first one :

S(A,B,C) = (A+B+C)/2

AREA(A,B,C) = SQRT(S(A,B,C)*(S(A,B,C)-A)*

1 (S(A,B,C)-B)*(S(A,B,C)-C))

3. A statement function to compute interest:

A(P,R,N) = P*(l+R)**N+.005

6.3.4. BUILT-IN FUNCTIONS

The 1107 FORTRAN IV Compiler recognizes 31 names as built-in
functions. The compiler will generate in-line code for the
evaluation of the built-in function value whenever reference
occurs.

The arithmetic expression,

i (, a, , a„ , ...., a)

references the built-in function with the name f and represents
the computed value, where a is any arithmetic expression of the
mode specified for the arguments of the built-in function and n
is the number of arguments. See the table "Built-in (Intrinsic)
Functions. "

The names for the REAL and INTEGER built-in functions have been
selected so that the result of the function will correspond in
type according to the naming conventions established for REAL
and INTEGER functions. The DOUBLE PRECISION and COMPLEX built-in
functions will begin with a D and a C, respectively. Note,
however, that DIM is a REAL built-in function.

March 1970 CENFOR 6- 7

6.3.4. BUILT-IN FUNCTIONS (Continued)

The name of a built-in function may be used for purposes in a

program other than to request the execution of a particular

function. The following uses will overrule the definition of a
name as a built-in function:

1. The name is used as a simple variable name.

2. The name is used as a statement function name.

3. The name appears in:

a. Type statement

b. EXTERNAL statement

c. DIMENSION statement

d. COMMON statement

e. PARAMETER statement

f. ABNORMAL statement

g. FUNCTION or SUBROUTINE statement

Note that if a built-in function produces a COMPLEX or DOUBLE
PRECISION result, the programer must not enter the name of that
built-in function in a type statement, as the name will not be
considered that of a built-in function according to the rules of
the above paragraph.

If the definition of the built-in function name is overruled
in a main program, the built-in function is not available in
the entire program unit. The built-in function names are
defined as global names. Therefore, the name may be overruled
in an internal subprogram and not affect the availability of
the function in the main program or in another internal sub-
program.

CENFOR 6- 8

March 1970

FORTRAN
Name

No. of
Args.

Function

Mode of

Argument

Function

ABS

1

Determine the absolute value of the argument.

Real

Real

IABS

Integer

Integer

DABS

D-P

D-P

AINT

1

Truncate; eliminate the fractional portion of the argument.

Real

Real

INT

Real

Integer

DINT

D-P

D-P

AMOD

2

Remainder; subtract from the first argument the appropriate
integer multiple of the second argument so that
the remainder is less than the second argument
but non-negative.

Real

Real

MOD

Integer

Integer

AMAXO

> 2

Select the largest value.

Integer

Real

AMAX1

Real

Real

MAXO

Integer

Integer

MAX1

Real

Integer

DMAX1

D-P

D-P

AMINO

> 2

Select the smallest value.

Integer

Real

AMIN1

Real

Real

MINO

Intege r

Integer

MINI

Real

Integer

DMIN1

D-P

D-P

FLOAT

1

Convert from integer to real.

Integer

Real

IFIX

1

Convert from real to integer.

Real

Integer

DBLE

1

Convert from real to double-precision.

Real

D-P

CMPLX

2

Convert two real arguments to one complex number.

Real

Complex

SIGN

2

Replace the algebraic sign of the first argument by that of the
second.

Real

Real

ISIGN

Integer

Integer

DSIGN

D-P

D-P

DIM

2

Positive difference; subtract the smaller of the two arguments
from the first argument.

Real

Real

IDIM

Integer

Integer

SNGL

1

Obtain the most significant part of a double-precision argument.

D-P

Real

REAL

1

Obtain the real part of a complex argument.

Complex

Real

AIMAG

1

Obtain the imaginary part of a complex argument.

Complex

Real

CONJG

1

Obtain the conjugate of a complex argument.

Complex

Complex

BUILT-IN (INTRINSIC) FUNCTIONS

March 1970 CENFOR 6- 9

6.3.5. NOTE on MINO, MINI, AMINO, AMIN1, MAXO, MAX1, AMAXO, AMAX2

These FORTRAN functions are used to determine the minimum or the
maximum of several integer or real numbers. All items in the
list must be expressions of the same mode. The names of these
functions indicate their use. The letters MIN or MAX indicate
whether a minimum or maximum will be sought in the list. The
character 1 or the character (zero) which follows indicates
the mode of the list: (zero) for an integer list; 1 for a
real list. If the function name begins with an A, the mode of
the function is real. If it begins with an M, the mode of the
function is integer. The function produces a maximum or mini-
mum by setting itself equal to the appropriate item in the list.

CAUTION : The functions which end in (zero) often cause
keypunch errors. The last character of MINO, AMINO, MAXO,
and AMAXO is a numeric zero (not the letter 0).

EXAMPLE 1 :

If the largest of three integer variables I, J, K is
greater than 50, call subroutine x.

IF (MAXO (I,J,K).GT.50) CALL X

EXAMPLE 2 :

Multiply the variable KET by the whole number portion
of the maximum of the real variables A and B.

N = KET * MAX1(A,B)

CENFOR 6-10 March 1970

6.3.6. NOTE on MOD, AMOD FUNCTION

These FORTRAN functions are used to determine the remainder
when one number is divided by the other. MOD is for integer
division and AMOD is for real division.

General Form

MOD (K,L)

AMOD (A,B)

K is an integer expression which is to be
divided by the integer expression L

A is a real expression which is to be
divided by a real expression B

After dividing the first argument by the second, the function
sets itself equal to the remainder.

EXAMPLE :

The counter KPAGE is the count of pages on a report.
Determine whether the current value of KPAGE is even

or odd. If even go to the statement 55.

IF (MOD(KPAGE,2).EQ.O) GO TO 55

March 1970 CENFOR 6-11

6.3.7. BUILT-IN TYPELESS FUNCTIONS AND, OR, LOC, COMPL, BOOL

6.3.7.1. AND

This sets the function expression equal to a value obtained
by a "logical AND" operation of two numbers.

Example :

NC = NA.AND.NB

(Bit in NA) (Bit in NB) (Result in NC)

10

10

111

If NA = 010203040506

and NB = 777700770000

then NC = 0102000^0000

The use of the built-in function is faster than the equivalent
CENSUS "LAND". See 8.8.

6.3.7.2. OR

This sets the function expression equal to a value obtained by
a "logical addition," or an "inclusive OR" operation.

Example :

NC = NA.OR.NB

(Bit in NA)

(Bit i

1

1

1

1

Bit in NB) (Result in NC)

1
1
1

If NA = 252525252525
and NB = 000077630077
then NC = 252577672577

The use of the built-in function is faster than the equivalent

CENFOR 6-12 March 1970

6.3.7.3. LOC

This routine returns the location of a function argument as
the value. This function may also be referenced through
the alternate entry point XLOC.

Example :

N = L0C(NB)-L0C(NA)

This example will return a value which is the actual number
of core locations between the two addresses.

6.3.7.4. COMFL

This routine complements the number found at the address of
the argument.

Example :

N = COMPL(N)

6.3.7.5. BOOL

This routine returns the function argument as the value of
the function. No conversion takes place.

Example :

M = B00L(N)

March 1970 CENFOR 6-13

6.3.8. EXTERNAL AND INTERNAL FUNCTIONS

Internal and external functions are subprograms, whole sections
of coding which return single values to the point in the
expressions which reference them.

External Functions

There are two kinds of external functions: (l) library
functions, and (2) external functions and subprograms.
These will be discussed under the heading SUBPROGRAMS.

The external functions supplied by FORTRAN are listed in the
following table. These mathematical functions may be referenced
in the general way.

f(a 1 , a 2 )

The external functions supplied in the Census library will be
discussed in a separate section.

CENFOR 6- 14

March 1970

FORTRAN
Name

No. of
ArgB.

Function and Definition

Mode of

Argument

Function

SIN

1

Trigonometric Sine: SIN (X)
DSIN (X)
CSIN (X)

Real

Real

DSIN

D-P

D-P

CSIN

Complex

Complex

COS

1

Trigonometric Cosine: COS (X)
DCOS(X)
CCOS(X)

Real

Real

DCOS

D-P

D-P

CCOS

Complex

Complex

TAN

1

Trigonometric Tangent: TAN (X)
DTAN (X)
CTAN (X)

Real

Real

DTAN

D-P

D-P

CTAN

Complex

Complex

ASIN

1

Trigonometric Arcsine: ASIN (X)
DASIN (X)

Real

Real

DASIN

D-P

D-P

ACOS

1

Trigonometric Arccosine: ACOS (X)
DACOS (X)

Real

Real

DACOS

D-P

D-P

ATAN

1

2
2

Trlglnometrlc Arctangent: ATAN (X)
DATAN (X)
ATAN(X r X 2 )
DATAN (X t , X 2 )

Real

Real

DATAN

D-P

D-P

ATAN2

Real

Real

DATAN2

D-P

D-P

SINH

1

Hyperbolic Sine: SINH (X)
DSINH (X)
CSINH (X)

Real

Real

DSINH

D-P

D-P

CSINH

Complex

Complex

COSH

1

Hyperbolic Cosine: COSH (X)
DCOSH (X)
CCOSH (X)

Real

Real

DCOSH

D-P

D-P

CCOSH

Complex

Complex

TANH

1

Hyperbolic Tangent TANH (X)
DTANH (X)
CTANH (X)

Real

Real

DTANH

D-P

D-P

CTANH

Complex

Complex

EXP

1

Exponential (e x ): EXP (X)
DEXP (X)
CEXP (X)

Real

Real

DEXP

D-P

D-P

CEXP

Complex

Complex

ALOG

1

Natural Logarithm (LOG e x): ALOG (X)
DLOG(X)
CLOG(X)

Real

Real

DLOG

D-P

D-P

CLOG

Complex

Complex

ALOG10

1

Common Logarithm (LOG 10 x): ALOG10 (X)
DLOG10 (X)

Real

Real

DLOG10

D-P

D-P

SQRT

1

Square Root (X) 1/2 : SQRT (X)
DSQRT (X)
CSQRT (X)

Real.

Real

DSQRT

D-P

D-P

CSQRT

Complex

Complex

CBRT

1

Cube Root (X) 1 / 3 : CBRT (X)
DCBRT (X)
CCBRT (X)

Real

Real

DCBRT

D-P

D-P

CCBRT

Complex

Complex

CABS

1

Determine the absolute value of the argument:
CABS (X) For X = a + lb

X«(a 2 + o2) 1/2

Complex

Real

DMOD

2

Remainder. subtract from the first argument the appropriate
Integer multiple of the second argument so that
the remainder is less than the second argument
but non-negative.

DMODJX^ X 2 )

D-P

D-P

•Note: H ths result of the Function Is Double- Precision or Complex, the Function name munt fce declared In a
Type cUtoraent.

EXTERNAL FUNCTIONS SUFFLIED

March 1970 CENFOR 6-15

6.3.9. NOTE ON SIN, DSIN, CSIN

The variable used as the argument for a trigonometric sine
degrees.) The following statement functions may be used
for converting degrees to radians and vice versa:

EXAMPLE:

Find the sine S of a real variable A expressed
in degrees.

CENFOR 6-16 March 1970

6.3.10. SUBPROGRAMS

6.3.10.1. EXTERNAL SUBPROGRAM - GENERAL

Within the FORTRAN system, it is possible to define
subprograms which may be called upon by other FORTRAN
programs. Generally, they are FORTRAN source language
programs that cannot be defined by a single statement and
are not commonly enough used to warrant their inclusion in
a library. External subprograms must be independently
compiled and incorporated into other FORTRAN programs for
execution. They are not independently executable as a
general rule. EXTERNAL subprograms are written behind the
END statement of the main program and each external subprogram
must have its own FOR card and its own END card. All data
references are local.

When COMMON statements are used in both the main program
and the subprogram, then the same area can be referenced by
both. See Chapter 7.

The function and subprogram statements allow the programer
to divide large programs into smaller subprograms or sub-
routines. This technique is a great aid to the programer
in the all important process of removing programing errors
(debugging). Program corrections may be made and programs
expanded or reduced in scope by processing the appropriate
subprogram rather than the entire program. Frequently this
results in a considerable saving of computer time.

An external subprogram may be referenced from any part of
any other program unit. It must not be referenced from its
own program unit. The name of a subprogram may appear in
an argument list of a reference only if the subprogram is
accessible from the place where the reference occurs. For
instance, a reference to an external function is made from
a main program which includes an internal subroutine S. If
the name S appears in the reference list, then S will be the
subroutine referenced when the statement "CALL P" is executed
within the external function if "P" is the dummy argument.

Programs over 700 statements in length should be divided into
a main program and external subroutine/s to prevent possible
overflow of assembly tables. See 16.2.

March 1970 CENFOR 6-17

6.3.10.2. FUNCTION SUBPROGRAMS - (External)

The first statement of a FUNCTION Subprogram must be of the
form

type FUNCTION f (a , a , ..., a )

where type is either REAL, INTEGER, LOGICAL, DOUBLE- PRECISION,
COMPLEX, or absent, f is a function name and a. are the formal
arguments, a. may be array names, non-subscripted variable
names, or the name of other FUNCTION Subprograms. Each name
must be distinct. Any aj_ may be the character, \$. When the \$
character is used as the i"^ n parameter, the i^* 1 parameter is
never referenced in the function f except in the statement:

RETURN k

If type is absent then the mode of f is determined by a type
statement or by the alphabetic naming conventions. If an a. ,
a formal argument, is an array name, then that array name
must appear in a DIMENSION statement of the subprogram in
which it occurs prior to any reference by an executable state-
ment or by a statement function definition. The DIMENSION state-
ment may, only in this case of subprogram usage with formal sub-
scripted arguments, assume a special form. Normally, the
only entries that may be made in the subscript positions of
an array named in a DIMENSION statement are integer constants,
and these integer constants specify the maximum dimensions of
the named array. It is possible in FUNCTION or SUBROUTINE
subprograms to have maximum dimensions of arrays appear as
nonsubscripted integer variables in DIMENSION statements.
In this case, the array name and all of the variable subscript
names must be listed as formal arguments of the subprogram.
This facility enables the subprogram to be made object time
variable in its requirements for data storage. The program
which contains reference to such a subprogram must also contain
a DIMENSION statement which specifies the actual dimensions
of such arrays. The nonsubscripted integer variables which
appear in such a subprogram as those formal arguments speci-
fying the maximum dimensions of an array can neither appear
on the left of an arithmetic or logical statement, nor can
they be changed in value in any other way by the subprogram.

All the formal argument names must occur in at least one execu-
table statement in the subprogram. Any actual argument for a
FUNCTION subprogram reference may be either an arithmetic
expression, a logical expression, an array name or another
function or subroutine, which also must appear in an EXTERNAL
statement in the referencing program.

The name of a function itself must not appear in a DIMENSION,
or statement in the subprogram. However, the name must appear

CENFOR 6-18 March 1970

6.3.10.2. FUNCTION SUBPROGRAMS - (External) (Continued)

at least unce on the left side of a logical or an arithmetic
statement , as an element of an input list or as an argument
or a subroutine call. (See RETURN below.)

The following are permissible arguments of a FUNCTION
Subprogram reference :

a. Any arithmetic expression.

b. Any logical expression.

c. An array name.

d. The name of another function or subroutine
which also must appear in an EXTERNAL
Statement in the calling program unless
the name appears as an explicit reference
elsewhere in the program.

e. A statement number preceded by the character \$.

f. The form:

nHhhh...h

where n is any unsigned integer, and hhhh...h is a
string of any n alphanumeric or special characters
including "blank".

Note: If the type of the user-written function is declared
in the subprogram, then the type should be declared
in the calling program.

Example:

COMPLEX CPLX, S, Y, Z

Z = CPLX(S,Y)

C FUNCTION SUBPROGRAM

COMPLEX FUNCTION CPLX(A,B)

RETURN
END

March 1970 CENFOR 6-19

6.3.10.3 RETURN

A subprogram will normally contain at least one RETURN
Statement. Each such statement marks the logical end of
flow for the subprogram and causes, in the case of a
function reference was imbedded, or in the case of a
following the CALL Statement. It will have the general
form:

RETURN

a Second form of a RETURN statement is :

RETURN k

where k is an integer constant or integer variable. If
this form was used the value of the integer, k, specifies
that the return will be made to the i^h argument of the
referencing statement (presumably the i"th argument was a
statement number preceded by \$). There is no limit to the
There may be more than one statement number argument re-
quired by a subprogram. This allows conditional returns
to various locations within a program.

If a RETURN statement is not specified then the END state-
ment will serve as a RETURN statement.

A third form of a RETURN statement is:

RETURN

where is an integer constant, 0. The execution of the
RETURN statement will result in a transfer to the system
error program.

The statement END must appear as the last statement of an
external function or subprogram.

CENFOR 6-20 March 1970

6.3.10.4. EXAMPLES OF FUNCTION SUBPROGRAMS

FUNCTION MAX (X,N)

C X = integer array

C N = size of array (N 2)

C COMPUTES MAXIMUM VALUE OF ARRAY

INTEGER X (N)

MAX = X (1)

DO 1 1=2, N

IF (X(I).GT.MAX) MAX = X(l)
1 CONTINUE

END

FUNCTION SUM (X,N)

C X = real array

C N = size of X

C Computes sum of elements of specified array

DIMENSION X (N)

SUM = 0.0

DO 1 1=1, N
1 SUM = SUM+X(I)

END

FUNCTION SMSQ (X,N)
C X = real array of size N
C Computes sum of squares of elements of X

DIMENSION X(N)

SMSQ = 0.0

DO 1 1=1, N
1 SMSQ = SMSQ+- X(I)*X(I)

END

March 1970 CENFOR 6-21

6.4. SUBROUTINE SUBPROGRAM (External)

A SUBROUTINE subprogram has so many points of similarity to a
FUNCTION subprogram that the treatment here will consist of
citing how it differs from a FUNCTION subprogram.

The major difference is that a SUBROUTINE subprogram may produce
many values from one reference whereas a FUNCTION subprogram may
produce one. Reference to a SUBROUTINE is made with the special
CALL statement described below.

A subroutine is always considered ABNORMAL.

In all other respects, subroutine references and external SUB-
ROUTINE subprograms are the same as function references and EXTERNAL
subprograms .

The SUBROUTINE subprogram returns values, if any, only through its
arguments (by causing values to be stored in the locations
associated with its actual arguments as specified in its CALL
statement) or through variables in COMMON blocks. No value is
associated with the name of a SUBROUTINE subprogram.

The form of a SUBROUTINE subprogram statement is either:

SUBROUTINE s (a, , a„ , . . . , a )
1' 2' n

or

SUBROUTINE s

where s is a subroutine name and aj_ are the n arguments. &± may be
any arithmetic or logical expression, variable name or constant.

Reference to a SUBROUTINE subprogram is made through the use of a
special statement which has no other use. This statement is the
CALL statement and has the form

CALL s(a, , a„ , . . . , a )

1 2 n

or

CALL s

where s is the subroutine name and a^_ are the actual arguments.

a. may take on all forms described for FUNCTION subprogram references,

Refer to the section entitled "SORT OPTION CODING" for an example of
an external subroutine containing several RETURN statements.

CENFOR 6-22 March 1970

6.4. SUBROUTINE SUBPROGRAM (External) (Continued)

Internal Function And Internal Subroutine Subprograms
Internal subprograms are compiled in conjunction with a Main
Program, a SUBROUTINE Subprogram, or a FUNCTION Subprogram. In
the latter two cases, the first line of compilation must be a
FUNCTION or SUBROUTINE statement.

Subprograms are indicated as internal by either of the following
subprogram statements :

1. SUBROUTINE S (a,, a , ..., a )

1 2' n

2. FUNCTION F (a,, a„, ..., a )

1 2 7 7 n

where S and F are the subprogram names and a^_ are the formal
parameters. The same rules apply to the subprogram names and the
formal parameters as in the previously defined subprograms.

Internal subprograms are referenced in the same manner as external
subprograms; i.e., an internal SUBROUTINE is referenced by a CALL
statement; an internal FUNCTION is referenced as other functions
are referenced. However, such references and calls must be made
within the main program or other internal subprograms contained
in the main program.

The compiler will assume that all statements appearing between
two internal subprogram statements belong to the first internal
subprogram. The occurrence of the Internal FUNCTION or SUBROUTINE
Subprogram statements will mark the end of the previous program.
The END statement will mark the end of the entire set of programs.

Identifiers (names) which are available in a program unit are
referred to as "global". The identifiers which are available
only to a particular internal subprogram will be referred to as
"local".

The following are global names of a program unit:

1. COMMON block names.

2. Names of internal subprograms.

3. All names including COMMON variable names which appear any
place in a program unit ' s main program or external subprogram
except formal argument names.

ly. Names of built-in functions.

March 1970 CENFOR 6-23

6.4.. SUBROUTINE SUBPROGRAM (External) (Continued)

Internal Function and Internal Subroutine Subprograms (Continued)

The following names are local to an internal subprogram:

1. Formal arguments of an internal subprogram.

2. Statement numbers.

3. Formats.

J+. Variable names in type or DIMENSION statements.

5. Variable names which have not appeared elsewhere in the
program unit.

6. Variable names appearing in the subprogram's COMMON statements.

7. Statement functions defined in the internal subprogram.

In a particular internal subprogram global names including
built-in function names and statement functions may be overridden
to be local by their appearance in one of the following statements:

PARAMETER
TYPE

DIMENSION
COMMON

The name of statement functions defined in a subprogram can override
a global name.

The EQUIVALENCE statement will not force a variable to be local.

CENFOR 6- 24

March 1970

6.4. SUBROUTINE SUBPROGRAM (External) (Continued)

Internal Function and Internal Subroutine Subprograms (Continued)

Formal arguments of an external subprogram must not appear in
internal subprograms belonging to the same program unit.

Example :

1 DIMENSION D(50),B(I)

A = C + D(I)

GO TO 10

10 CALL Z (A, 20)

X = A + Y (R+S, \$6,U)

10

SUBROUTINE Z (W, V)
DIMENSION D (25)

CALL Q(D(1), \$ 12, D(2))

11 GO TO 10

12 V = D (J)/B(J)

SUBROUTINE Q (X, \$, T)

RETURN 2

CALL Z (E, F)

END

March 1970 CENFOR 6-25

6.4. SUBROUTINE SUBPROGRAM (External) (Continued)

Internal Function and Internal Subroutine Subprograms (Continued)

The SUBROUTINE Statement, SUBROUTINE Z(W,V) indicates the end of
the first program. Subroutine Z is terminated by the SUBROUTINE
Statement, SUBROUTINE Q(X, \$, T) and SUBROUTINE Q is terminated
by the statement RETURN 2 or the END Statement. The END state-
ment also terminates the end of the entire set of programs. The
global variables for this program are A, B, C, D, Z, Y, R, S,
and U. The local variables in the internal SUBROUTINE Z are ¥,
V, and D. Note that D is also a global variable. The local
variable D is a unique variable and not the same as the global
variable D, even though they have the same name. The only global
variable used in SUBROUTINE Z is the variable B. The statement
number 10 is local to SUBROUTINE Z and different from the global
statement number 10 in the first program.

The internal subroutine, SUBROUTINE Q (X,\$,T) has the local
variable X, T, E, and F. If the RETURN 2 statement is executed
it will return control to the statement number that is inserted
in the second dummy argument. If the END statement is used as
the return statement of the internal subroutine, control is
transferred to the next executable statement of the referencing
program.

CENFOR 6-26 M arch 1970

6.5. ABNORMAL FUNCTIONS

The definition of a Normal Function is an External Function which
has all of the following properties:

a. It has no implied (COMMON) arguments.

b. None of its arguments are function outputs. Its
single output is through its name.

c. If a function call with a given set of arguments
produces a given result, then all references to the
function with all arguments identical with the given
set will give the identical result. This excludes
functions which, for example, have local variables
whose values are saved from reference to reference.

d. The function contains no I/O statements.

An ABNORMAL Function is one which fails to possess one or more
of the properties listed above. No attempt will be made to
optimize the computation of common subexpressions which contain
references to ABNORMAL Functions.

The following rules will apply:

a. If an ABNORMAL statement does not occur in a program, then
all function references are considered to be ABNORMAL.

b. If an ABNORMAL statement occurs, then all functions so
declared will be assumed to be ABNORMAL, and all other
functions will be assumed to be Normal.

c. If one and only one ABNORMAL statement occurs, and that
statement lists no
treated as Normal.

statement lists no function names, then all functions are

For example :

1 ABNORMAL F

2 A = F(X) + F(X)

3A=2* F(X)

March 1970 CENFOR 6-27

6.5. ABNORMAL FUNCTIONS (Continued)

In the above example, F is defined in statement number 1 as an
ABNORMAL Function. This function might contain statements that
rewind or backspace magnetic tape, set hardware indicators, etc.
If F(X) backspaces magnetic tape one record, then in statement
number 2, the magnetic tape unit would be backspaced two records
and the output value of F would be doubled and replace the value
in A. In statement number 3, only one record on the magnetic
tape unit is backspaced, and the output value of F would be
doubled, and replace the value in A. Therefore, these state-
ments do not necessarily have the same result. If F(X) were
normal the results of statements 2 and 3 would have been identical,

6.6. EXTERNAL STATEMENT

The EXTERNAL statement, contained in the referencing program,
allows the processor to distinguish between a variable name and
a procedure name. The general form of this statement is as
follows :

EXTERNAL f n , f „ , . . . , f
12' n

where the symbols "f" are names of external functions or external
subroutines and n is a positive number. If the name of an external
subprogram appears in the referencing program unit in reference
lists only, the name must also be contained in an EXTERNAL state-
ment. The statement EXTERNAL f in the main program or external
subprogram of the calling program unit makes f recognized as an
external subprogram in the entire program unit. The same statement
in an internal subprogram limits recognition of f as an external
subprogram to that internal subprogram. Note that a single function
reference f (a]_,a2, . . . . , a n ) or the statement CALL s(a^, a2,.., a n )
placed anywhere in the program unit makes the appearance of f (func-
tion) or s (subroutine) respectively in an EXTERNAL statement
unnecessary.

The order of the procedure names in an EXTERNAL statement is
arbitrary.

CENFOR 6-28 March 1970

6.6. EXTERNAL STATEMENT (Continued)

An example of using EXTERNAL is the case where an argument list
of a procedure called COMP requires the (supplied) function
SIN, and a procedure written by the programer called SUM. The
statement appears as follows :

Referencing Program

EXTERNAL SIN, SUM

A = 4.2 + C0MP((Y/(2)+X), SIN, SUM)

Procedure

FUNCTION COMP (XRAY, A, B)

Z = KRAY + .2

COMP = A(Z) - B (Z)

Procedure names used only as arguments should appear in the
EXTERNAL statement. That is, if the argument list were
COMP ((Y/2-"-X,SIN(D),SUM(E,F)), the values associated with names
SIN and SUM would be computed prior to transfer of the arguments,
Therefore, SIN and SUM are not declared in an EXTERNAL statement,

March 1970

CENFOR 6-29

6.6. EXTERNAL STATEMENT (Continued)

Example of the Use of the EXTERNAL Statement

As an example of what can be done, the following program contains
a main (calling program) and a SUBROUTINE program. The subprogram
contains exactly one executable statement: Y = F(X)

The arguments listed are X,F, and Y, making the function F a
matter of choice in the subprogram call.

The main program calls this subprogram three times. Each time
the value of X is 2.0 and the actual variable corresponding to Y
is RESULT. The arguments corresponding to F are successively
SIN, COS AND SQRT. These three supplied function names are listed
in an EXTERNAL statement. In place of standard mathematical
functions, original FUNCTIONS might have been written. Built-in
functions may not be used in EXTERNAL statements because they
are coded "in line". Examples are: MOD, AMOD, ABS, IABS, FLOAT,
and IFIX.

,111
EX T:E R N

A L S I N

. 1 cl s , s

qIr t ;

! 1

i

CiA|L j L: S

U B jR ! (2

. , S I N

, |r |e

S U L

T

n

!

w r tc It e :

(6

, |l;2 9

) R E S U L

t|

|l 29

F (0 (R (M A |T

( i X

1 H S

IN( 2 \.?

)i

=

i> F

1

. 6|) :

C A LL

S

U:B|R| ( 2

. ft , c s

!

E

S U L

T )

w|r|i |t |e|

(|6|, 1 3 p

) R E S U

L T

a 30

lii

F R ! M A T

( jljl ! H C

S ( 2 .

~VP

=

, F

lW\. J6 )

1

CA;L;Li S

U B

R

( 2

. p , S Q R

T , R

ESU

L T )

w;r i ! te

(6

>

131

) RESU

L T

1

3 1

1 ! f 1 1

F OSRHlA T

( 12 H S

Q R T ( 2 .

)!

1 t

F 1 . 6 )

S

T

P

E

N

D

1

1

i

| |

! !

i

1

1! 1

J _

S

U

B

R

u

T

I

N

E

i

s

U B R ( X

f

F , Y

7 i

)

1 | i

Y

F (

it

i ! :

1 ' I

: 1 ! i !

1 : i

RET

U jR N

j

i

! 1

E In ;D

i !

i

1

j j

j

< i

1 ! !

1 1

; 1

; 1
....

1 ; 1

CENFOR 6-30 March 1970

6.7. ERRORS TO BE AVOIDED WHEN USING SUBPROGRAMS

Many kinds of errors can occur in the writing and use of
subroutines. Most of these errors are errors of omission or
errors of inconsistency. The EXTERNAL declaration must appear
in the calling program when a procedure name is used as an actual
parameter. The dimensions of an array must appear as separate
actual parameters when an array appears in a subroutine whose
dimensions depend on the calling program. The number and type of
actual parameters must agree exactly with the number and type of
formal parameters. The actual parameters in a CALL statement
must be listed in precisely the same order as the corresponding
formal parameters are listed in the procedure heading. When a
formal parameter represents an array name, the dimensions must
be declared in the subroutine program. The punctuation RETURN
must be placed wherever a return to the calling program is to be

The name of a procedure itself cannot be used within the program
for that procedure. None of the formal parameters can appear
in EQUIVALENCE declarations. When writing a FUNCTION subprogram,
the value must be returned to the name of the FUNCTION.

6.8. EXERCISES:

6.8.1. Prepare a statement function which could be used to compute
one. half the perimeter of a triangle.

,2. Prepare a subroutine to check a variable N for the value 0.
If the value is not 0, code a return to a statement number in
the main program.

6.8.1. P(A,B,C) = (A+B+C) / 2,

6.8.2. SUBROUTINE CHECKZ (N,:

IF (N) 1, ,1
RETURN
1 RETURN 2
END

7. SPECIFICATION STATEMENTS

March 1970 CENFOR 7- 1

7.1. GENERAL

Specification statements are used to allocate storage space to
variables and arrays, to permit sharing of storage space by
variables and arrays in one or more programs, and to specify
data to be pre-stored in storage locations assigned to variables
and arrays.

Four types of specification statements will be included:

1. DIMENSION

2. EQUIVALENCE

3 . COMMON

4. DATA

Specification statements are non-executable. All reference of
executable statements to a variable appearing in a specification
statement must be preceded by that specification statement.

7.2. DIMENSION STATEMENT

This statement is used to declare arrays and has the following
general form:

DIMENSION a 1 (c 11 ,c 12 ,...,c 1 .), a 2 ( c 2 i> c 22' * ' ' C 2\J '

,a \C -i,c ,-, i c )

' n nl n2' nm

where the a's stand for the names of the arrays. The integers
j,k,...,m indicate the number of dimensions of their respective
arrays. The number of dimensions may be one to seven, n is a
positive integer and the symbols "c" are positive integers or
parameter variables. The magnitude of the c's indicates the maxi-
mum value of their respective subscripts permitted in any array
element reference. The DIMENSION statement appears before the
first executable statement of the program.

Multilevel dimensions are always written from left to right in
increasing order of inclusiveness of the groupings in a table.
In other words, minor to major. When referencing a table, the
subscripts used follow the same order.

No reference to a subscripted variable is permissible unless the
dimensions of the variable have been previously declared. No
subscripted variable reference may contain a subscript which,
during execution of the object program, may assume a value larger
than the maximum specified for it in the DIMENSION statement. In
a subprogram, no DIMENSION statement may contain the name of the

CENFOR 7- 2 March 1970

7.2. DIMENSION STATEMENT (Continued)

subprogram. No program making reference to a subprogram may
contain a DIMENSION statement listing the name of the sub-
program.

The name of an array without parentheses may also appear in a
preceding type statement. If an array is dimensioned in a
DIMENSION statement, it must not be dimensioned in a COMMON
statement. Names used in a DIMENSION statement of an internal
subprogram override global declarations of names including
implied ones for that internal subprogram.

In an internal or external subprogram, an array name may
appear in a DIMENSION statement. If this array name is a
formal argument, the magnitude of the maximal subscript
values may be indicated by unsubscripted INTEGER variables,
provided the latter are also formal arguments. The number of
dimensions and the maximal subscript values do not necessarily
have to be the same as those of the actual argument which is
an array in the calling program. The only restriction is that
the number of locations determined by the DIMENSION statement
in the subprogram must not exceed the number of locations
provided by the DIMENSION statement in the calling program in
which the name of the actual argument appears.

Examples :

1. DIMENSION KARAY(10,20), LARAY( 50,10,3)

2. PARAMETER J = 10, K = 20, L = 50
DIMENSION KARAY(J,K),LARAY(L,J,3)

DIMENSION NA(N),NB(N)

DO 10 J = 1,N
10 NA(N) = NA(N) + NB(N)
RETURN

March 1970 CENFOR 7- 3

7.3. EQUIVALENCE STATEMENT

7.3.1. The EQUIVALENCE allows a storage unit to be referenced by more
than one name. This statement is used to conserve storage.
For instance , storage containing an array of data during one
part of a program can contain variables during a succeeding
part of the program which no longer requires the array.

The EQUIVALENCE statement contains groups of two or more
names in the same program unit which are to share the same
storage location. More than one group of names can appear in
an EQUIVALENCE statement. The general form of an EQUIVALENCE
is as follows:

EQUIVALENCE (name.. ,name ? , . . . . ,name ) , (name ,name„ , . . . . ,name ),....

A name can be a variable name , an array element name , or an array
name.

The names which are to reference the same location must be
separated by commas and enclosed in parentheses. Each parenthesized
group of names is separated from succeeding groups of names by a
comma.

Note that an EQUIVALENCE statement does not provide a mathematical
definition; it allows a storage unit to be referenced by different
names.

An example of an EQUIVALENCE statement containing an array and a
list of variables, R,S, and T, is as follows:

DIMENSION SLUG(3)

EQUIVALENCE! SLUG(l) ,R) , (SLUG(2) ,S) , (SLUG(3) ,T)

Note that if one element of an array is equivalenced to one element
of another array, all of the arrays are equivalenced.

For the purpose of the EQUIVALENCE statement, the appearance of the
variable name without a subscript is taken to mean the first ele-
ment in the array.

If a list contains three or more elements, or if the same variable
name occurs in more than one list, the possibility of inconsist-
ency arises. For example, the statement

EQUIVALENCE (A(3) ,0(2) ) ,UU) ,D(3) ) ,(C(2) ,D(3) )

implies the equivalence of A(3),A(<4). Inconsistencies of this
nature are not permitted.

CENFOR 7- 4 March 1970

7.3.2. USES OF THE EQUIVALENCE STATEMENT

1. The EQUIVALENCE statement is primarily used to conserve
storage space.

Example: If two or more variables are used for temporary
storage and their use is never overlapped, they
may be put in an EQUIVALENCE statement so they
will be assigned the same storage space.

2. It may be used to force the arrangement of storage of
non-COMMON variables (both subscripted and non-subscripted
variables). For instance, it may be desirable to have the
variables R, T, B and A stored consecutively in storage;
this can be done with

EQUIVALENCE (R,V(l) ) , (T,V(2) ) , (B, V(3) ) , (A,VU) )

For simplicity assume that all variables involved are of
the same type. In the same program, a READ Statement may
then be given to read either R, T, B, or A, depending on a
second quantity:

if K = 1 then V(K) is R

K = 2 then V(K) is T

K = 3 then V(K) is B

K = 4 then V(K) is A

3. Formal arguments of internal or external functions or
subroutines are considered to be independent of each other.
If two actual arguments of a function reference or sub-
routine CALL are specified by the same variable, they are
generally considered to be two different variables within
the body of the subprogram. The appearance of formal argu-
ments in an EQUIVALENCE statement of the subprogram will cause
the compiler to use the location(s) of their corresponding
actual arguments. For instance, if F(X,Y) is a function
statement, X,Y and V are variables of the same type, and X
and Y are assigned no values within the function body, the
function reference F(V,V) will not cause the function body

to have a common value for X and Y during execution. However,
with X and Y appearing in an EQUIVALENCE statement, the loca-
tion of V is used whenever X or Y are referenced.

4. It may be used to allow a storage area to be referenced
using different names having different dimensions and/or
different types.

DIMENSION NA (100), NB(l)",. B(100)
EQUIVALENCE (NA(l), NB(l), B(l))

March 1970 CENFOR 7- 5

7.3.2. USES OF THE EQUIVALENCE STATEMENT (Continued)

5. When a variable name has been inadvertently changed, an

EQUIVALENCE statement can be used to equate the names to one
location rather than correcting all the references to an
intended variable.

7.4. COMMON STATEMENT

7.4.1. GENERAL

This statement permits program units to share work storage areas
and has the general form:

C0MM0N/X 1 /a 1 , a £ , . . . , a^X/a^ ,* n+r . . . , a m

in which X is any name of from one to six alphabetic or numeric
characters, the first of which is alphabetic, and a is any
variable or array name. X is called a block name, a name which

bears no relationship to any variable or array name which may
occur in the same or any other program unit. In any given
COMMON statement, the variables occurring between block name X
and the next block name or the end of the statement are in COMMON
Block X. All variables from the beginning of the statement until
the appearance of a block name, or all variables in the state-
ment if no block name appears, are in "blank" or unlabeled
COMMON. Alternatively, the appearance of two slashes with no
block name between them assigns the variables which follow to
"blank" COMMON.

A given COMMON Block name may occur more than once in a COMMON
Statement or in a program. The compiler will string together
in a given COMMON Block all variables so assigned, in the order
of their appearance. The size of a COMMON Block is the sum of

the storage required for each element introduced through COMMON
and EQUIVALENCE Statements. The sizes of "blank" COMMON in the
various programs and subprograms which may be run together need
not be the same. The name of a formal argument must not appear
in a COMMON statement.

7.4.2. COMMON BLOCK SIZE RULE

The sizes of all labeled COMMON Blocks of the same name must be
the same in all programs' which may be executed together.

Dimension and Common

All array names used in a program or subprogram must have their
dimensions decalred in that program prior to their occurence

in executable statements. An array name which is to be assigned
to COMMON may have its dimension declared in a DIMENSION state-
ment or simply by appending the dimension information to the
array name in the Common Statement. It must not be dimensioned
in both statements.

CENFOR 7- 6 March 1970

7.4.2. COMMON BLOCK SIZE RULE (Continued)
Dimension and Common (Continued)
For example :

COMMON X, Y (12,2,6), Z

would require a DIMENSION statement for X, if X were meant to be
an array. However, the DIMENSION information for Y, in the
example, has been given in the COMMON statement, and in this case
must not occur in a DIMENSION statement. Names appearing in
COMMON statements may also appear in preceding type statements.

Note, also that DOUBLE PRECISION and COMPLEX variables require
special consideration, since they each occupy two computer words.
A DOUBLE PRECISION variable is stored in two adjacent words with
the most significant part in the first word. COMPLEX variables
are, likewise, stored in two adjacent words with the real part
occupying the first word. References to COMPLEX or DOUBLE PRE-
CISION variables in EQUIVALENCE statements are always references
to the first word of the corresponding word pair.

If, for instance, A is a COMPLEX array, B a REAL array and C a
REAL unsubscripted variable, the statement

EQUIVALENCE (A(l), B(l)), (B(2), C)

would cause B(l) to occupy the real and C to occupy the imaginary
part of A(l). But, under the same conditions the statement

EQUIVALENCE (A(l), B(l)), (A(2), B(2)),

is inconsistent. If, however, A were REAL, this statement
would be consistent, but the second list would be redundant.

Note that if one element of an array is equivalenced to one
element of another array, the entire arrays are equivalenced.

For purposes of planning the sharing of storage, the following
statements show ways of storing new values in a location:

1. An arithmetic or logical statement will cause a value to be
stored for the variable on the left-hand side of the equal
symbol (=).

2. Executionof a DO will sometimes store a new value of the
index variable.

3. Execution of a ASSIGN j to k will store a value in k.

4. Execution of input statements will store values in locations
specified by the input list.

March 1970 CENFOR 7- 7

7.4-2. COMMON BLOCK SIZE RULE (Continued)
Dimension and Common (Continued)

5. Execution of a CALL statement may cause values to be stored
in variables given as parameters or in common storage.

6. Reference to an external function may cause new values to
be stored in common storage.

For purposes of arithmetic optimization, when a variable
which appears in an EQUIVALENCE Statement has been defined
by any of the above six items, then all equivalenced variables
will be assumed defined.

The compiler will ignore equivalencing a formal argument to
a non-argument variable. For equivalencing two formal argu-
ments, see Section 7.3.2. USES OF THE EQUIVALENCE STATEMENT .

7.4.3. COMMON USED WITH EQUIVALENCE

When an array is named in an EQUIVALENCE statement and in a
COMMON statement, the equivalence is established in the general
way. This may increase the size of the COMMON block of storage
and thus change the correspondences between the COMMON block
described and some other COMMON block in another program.

For instance, consider these statements:

DIMENSION AU), BU)

COMMON A,C

EQUIVALENCE (A(3), B(l))

Without the EQUIVALENCE statement, the COMMON block would con-
tain five storage locations in the sequence A(l) ,A(2) ,A(3) ,A(4) ,C.

With the EQUIVALENCE statement the B array is brought into COMMON
and requires the following sequence of storage location:

A(1),A(2),A(3),A(4),C

B(1),B(2),B(3),BU).

COMMON is now six storage locations long, since A(3) is equivalent
to B(1),AU) to B(2), and C to B(3). BU) is the sixth variable
of COMMON. Beware of contradictions. It is illogical to equiva-
lence a variable in a COMMON block to another variable in the
same block.

CENFOR 7- 8 March 1970

7.4-4. SOME USES OF COMMON

Ordinarily a variable within an external subprogram is not the
same variable as that which was previously defined by the
same name in the main program. However, if the programer
wants it to mean the same thing, he can mention it in a
COMMON statement in both the main program and the external
subprogram. The two variables, although they are still
distinct in principle, are assigned to the same storage loca-
tion.

Another use of COMMON is to use it to assign locations to
variables and to arrays in the order desired. The assignment
of storage addresses is in consecutive order as the variables
appear in the COMMON statement, or statements, with those in
blank COMMON appearing first.

Example of COMMON :

In the following statement:

COMMON A,B,C/ITEMS/X,Y,Z//D,E,F

the variables A,B,C,D,E and F will be placed in blank common
in that order; the variables X,Y, and 2 will be placed in the
named common area ITEMS.

The same effect may be produced thus:

COMMON A,B,C

COMMON //D,E,F

COMMON /ITEMS/X

COMMON /ITEMS/Y

COMMON /ITEMS/Z

March 1970 CENFOR 7- 9

l.U.U. SOME USES OF COMMON (Continued)

Example of COMMON : (Continued)

Another feature of blank common is that variables or arrays
that appear in a calling program or a subprogram may be
made to share the same storage locations with variables or
arrays (having different names) in other subprograms. For
example, if one program contains the statement:

COMMON TABLE

and a second program contains the statement

COMMON TREE

the variables TABLE and TREE refer to the same storage
locations.

If the main program contains these statements

REAL A,B,C

COMMON A,B,C
and a subprogram contains the statements

REAL X,Y,Z

COMMON X,Y,Z
then A,B, and C are in the same storage locations as X,Y and Z.

CENFOR 7-10 March 1970

7.5. DATA STATEMENT

The DATA statement provides the assignment of data at
compilation time. It is not an executable statement at
object time; however, new values may replace the initial
values through executable statements at run time, thus
destroying the original contents.

The DATA statement must be preceded by all DIMENSION, COMMON,
and Type statements that relate to the variable names in the
DATA statement lists.

The form of the DATA statement is:

DATA List/Literal List/, List/Literal List/, ....

where List is a series of one or more variables or array names,
and Literal List is the data to be placed within the variable
or array.

If an array name appears without subscripts, enough data must
be present to fill the array. If it is desired to partially
fill an array, then subscripts or implied DO-Loops must be
used.

Example 1 :

DIMENSION CARGO(IO), WEIGHT(lO)

DATA CARGO , WEIGHT/20* 100 . 0/

Example 2 :

DIMENSION CARGO (10), WEIGHT (10)

DATA (CARG0(I),WEIGHT(I),I = 1,10,2)/2*0. 0,8*100.0/

DATA CARGO (10) / 1.0/

Note the asterisk in the above examples. It is possible
to repeat literals without explicitly rewriting them by use of
an asterisk and of an unsigned integer preceding the literal,
specifying the number of times that the literal is to be repeated.

Note that data should be bounded by slashes.

March 1970 CENFOR 7-11

7.5. DATA STATEMENT (Continued)

The types of data which may appear in a DATA statement are:

1. Integer constants

2. Real constants

3. Hollerith constants (preceded by nH)
4.. Octal constants (preceded by 0)

5. Double Precision

6. Complex

Examples of DATA statements:

DATA DICK, BOB, DON /12H END PROGRAM ,7.8/

DATA A/67.87/, B/54.72/, C/5.0/

DATA A,B,C /67.87, \$4.72, 5.0/

DATA R,S,T,U,V,W /6*21.7/

DATA N(l) /10/

DATA DOT, X, BLANK /lH. ,1HX,1HA/

Note in the above statement, if the number of characters of text
is not the same as the number of characters in a storage location,
the data is left adjusted and space filled on the right.

DATA N1,N2 /077, 07700/

Note in the above statement, if the octal characters of text are
not sufficient to fill the storage location, the data is right
justified and ignore filled on the left.

C 72
DIMENSION M(20,30) "J

DATA ((M(I,J),I=1,20),J=1,2) /60H

A ,60H

,60H

,60H

/

Note that a comma is used between the data items of the list.
The number of commas separating data items may not exceed 199.

1

THIS IS

2

3

EXAMPLE

4

CENFOR 7-12 March 1970

7.6. EXERCISES

7.6.1. Prepare a DIMENSION statement for an array NA to reserve 10
records of 20 words each.

7.6.2. Prepare a DIMENSION statement, and a DATA statement for an
array NLABL, the contents of which are:

6,0,0,24hTHTS IS A TAPE LABEL

7.6.3. Code a subroutine to clear an array of any size. Use
parameters.

7.6.1. DIMENSION NA(20,10)

7.6.2. DIMENSION NLABL(7)

DATA NLABL/6,0,0,24HTHIS IS A TAPE LABEL

7.6.3. SUBROUTINE CLEAR(NARAY,N)
DIMENSION NARAY(N)

DO 10 J = 1,N
10 NARAY(J) =
RETURN

8. CENSUS LIBRARY FUNCTIONS

March 1970

CENFOR 8- 1

CENSUS LIBRARY FUNCTIONS

The following are the CENSUS written library functions available
for data manipulation, extractions, and conversions.

LPM (x)
n

J. .(NAME, n)
jf

IXTRC.(NAME,n)
J

LStt(NAME,n)

lsub(na,nb)

land(na,nb)

lfx(name;

LXF(NAME

LFB(NAME

LXB(NAME

LBF(NBIN,NFILL)

LBX(NBIN,NFILL)

MSR(\$HXXXX)

Justify, shift and extract
Extract from an array and justify
Shift a word
Selective substitute
Logical subtraction (exclusive OR)
Selective clear (logical AND)
Fieldata to XS3 Conversion
XS3 to Fieldata Conversion
Fieldata to Binary Conversion
XS3 to Binary Conversion
Integer binary to Fieldata Conversion
Integer binary to XS3 Conversion
Systems references; XXXX may be:
DATE, TIME, JRID, or MACH.

CENFOR 8- 2

March 1970

1. LPM (x)

n

which may be read in as schedule cards. A maximum of ten
parameter cards may be used, containing up to eleven words
each, producing a maximum parameter array of 110 words. The
mode of the LFMn function is always integer. The parameter
cards consist of Fieldata characters.

I General Form

LPM (x)
n

n = the

parameter

card

number

(o

through

9)

x = the

word

numbe

r on

a card

Example 1 :

To set the 5th word from the first parameter card into N:

N = LPMO (5)
Example 2 :

To set the first word from the last parameter card into K:

K = LPM9 (1)

Example 3 :

To move the entire 110 word parameter array into KARAY, the
following sequence could be coded:

DO 110 J = 1,110

100 KARAY (J) = LPM0(J)

Note that the definition of "LPM n (x) is continuous throughout the
entire 110 words. In other words, the expression " LPMO ( 110)"
and "LPM9(ll)" are equivalent.

Please note that data may be moved from the parameter area,
but no data may be moved into the parameter area.

Example J+ :

To test the contents of a parameter word against a specific
Hollerith constant, the following sequence could be coded:

DATA NH0LL /6H A ATEST/

IF (LPMO (l).EQ.NHOLL) GO TO 999

March 1970

CENFOR 8- 3

8.2. J. f (NAME,n)

This sets the function expression equal to a value obtained by
extracting the Nth field (half, third, or sixth of a word) from
"NAME" and justifying the result (either to the right, left,
arithmetically, or no justification.

Ge

neral Form

J.
J

(NAME,n)

J

= type of justification = R (right justification)

= L (left justification)

= A (arithmetic justification

) *

= N (no justification)

f

= type of field

to extract = H (half word)

= T (third word)

= S (sixth word)

j

NAME = the name of

the word from which the extraction is

•

n =

the position of the field within "NAME" to be extrac
for half word extraction it may be a 1 or 2
for third word extraction it may be 1, 2, or 3
for sixth word extraction it may be 1,2, 3,4 , 5 or 6

ted

I

\

Arithmetic justification means there is an extension of the
sign of the extracted field. For example :

if NAME = 36374.0414243

JAT(NAME,1) is OCTAL: 000000003637

because the first bit of the first character 3 (binary 011)
is a zero.

On the other hand

JAT (NAME, 3) is OCTAL: 777777774243

because the first character is 4 (binary 100) and its leading
bit is a 1. Arithmetic justification is not effective on
sixth word extractions, therefore leading zeros will always
be present.

CENFOR 8- 4

March 1970

8.2. J. f (NAME,n) (Continued)

EXAMPLES

If "NAME" = 36374.04.14243 (octal) then the values of the expressions
below are as shown:

Expression

JRS

(NAME, 2)

JLH

'NAME, 2)

JNT

{ NAME, 2)

JAT

;name,i)

JAT

; NAME, 2)

JLS

>AME,1)

JAS (

NAME, 4)

JNS (

NAME, 5)

JAH (

NAME, 2)

JRT (

NAME, 3)

Octal Value
060000000037
414243000000
000040410000
000000003637
777777774041
360000000000
000000000041
000000004200
777777414243
000000004243

March 1970

CENFOR 8- 5

1.3. IXTRC. (NAME,n)

This sets the function expression equal to a value obtained by
extracting the Nth six-bit character from an array and justifying
the result (either to the right, left, or no justification).

General Form

IXTRC. (NAME,n)
J

j = type of justification = R

(right justification)

= L

(left justification)

= N

(no justification)

NAME = name of the array

n = the character position in

the array "NAME"

(the maximum for n would

be a number which is

6 times the number of words in the array)

Example :

If the array "INCARD" contains an image of an 80 column card
and "IN" is an 80 word array and the following statements are
executed, then 80 words of "IN" will contain the 80 characters
of "INCARD". The results (in this case) are left justified,
zero fill to the right.

DO

10 1= 1,80

10

IN(I) = IXTRCL (INCARD, I)

CENFOR 8- 6

March 1970

8.4-. LStt (NAME,n)

This sets the function expression equal to a value obtained by
shifting "NAME" as described below.

General Form

LStt (NAME,n)

tt = type of shift = RC (right circularly "n" bit positions)

RL (right logically "n" bit positions) *

LC (left circularly "n" bit positions) *

LL (left logically "n" bit positions) *

RA (right arithmetically "n" bit
positions) **

n = the number of bit positions to shift NAME

A logical shift results in the loss of bits and the
substitution of zero bits.

An arithmetic shift results in the loss of bits and
sign extension to the left as in JRT.

EXAMPLES

If "NAME" = 01020304-0506 (all values shown in octal)

then the values of the following expressions are as shown:

Expression Octal value

LSRC (NAME, 12) 05060102030^

LSRL (NAME, 18) 000000010203

LSLC (NAME, 6) 02030^050601

LSLL (NAME, 24) 050600000000

LSRA (NAME, 18) 000000010203

LSRA (LSLC(NAME,5),35) 777777777777

LSRC (JNS(NAME,2),6) 000002000000

LSRL (NAME, 36) 000000000000

March 1970

CENFOR 8- 7

This sets the function expression equal to a value obtained by
combining two words on the basis of a mask.

General Form

where the "1" bits in "MASK" define the bit positions that
will be taken from "NA", and "0" bits in "MASK" define the
bit positions that will be taken from "NB".

Example

If NA = 010203040506

and NB = 767574737271

then the value of the expression LSSU(NA,MASK,NB) is 01757^7206

This sets the function expression equal to a value obtained by
a "logical addition," or an "inclusive OR" (i.e., AND/OR) opera-
tion.

General Form

(Bit in NA)

(Bit

in

NB)

(Result)

1

1

1

1

1

1

1

Example

If NA = 252525252525

and NB = 000077630077

then the value of the expression

CENFOR 8- 8

March 1970

8.7. LSUB(NA,NB)

This sets the function expression equal to a value obtained by
a "logical subtraction," or an "exclusive OR" (i.e. EITHER/OR)
operation.

General Form

LSUB(NA,NB)

(Bit in NA)

(Bit in

NB)

(Result)

1

1

1

1

1

1

Example

If NA = 765432102345

and NB = 777777000000

then the value of the expression

LSUB(NA,NB) is 012345102345

8.8. LAND(NA,NB)

This sets the function expression equal to a value obtained by
a "logical AND" operation.

General Form

LAND(NA,NB)

(Bit in

NA)

(Bit

in

NB)

(Result)

1

1

1

1

1

Example

If NA = 010203040506

and NB = 777700770000

then the value of the expression

LAND(NA,NB) is 01020040000

March 1970

CENFOR 8- 9

,9. LFX(NAME)

This function changes the Fieldata characters of a word to the
corresponding XS3 codes. If no corresponding code exists, the
character becomes an ignore.

General Form

LFX(NAME)

Example

NXS3 = LFX(NFD)

where NFD is the Fieldata word to be used as input to the
conversion, and NXS3 is the converted result in XS3.

Fieldata

Character

XS3

Fieldata

Character

XS3

00

@

00

40

)

43

01

I

00

41

-

02

02

1

00

42

+

63

03

#

35

43

C

00

04

CR

00

44

—

76

05

%

01

45

y

00

06

A

24

46

&

16

07

B

25

47

i

55

10

C

26

50

x-

56

11

D

27

51

(

17

12

E

30

52

%

75

13

F

31

53

'.

62

H

G

32

54

7

57

15

H

33

55

;

00

16

I

34

56

*

21

17

J

44

57

\

00

20

K

45

60

03

21

L

46

61

1

04

22

M

47

62

2

05

23

N

50

63

3

06

24

51

64

4

07

25

P

52

65

5

10

26

Q

53

66

6

11

27

R

54

67

7

12

30

S

65

70

8

13

31

T

66

71

9

14

32

U

67

72

i

15

33

V

70

73

J

23

34

w

71

74

/

64

35

X

72

75

#

22

36

Y

73

76

D

00

37

Z

74

77

¥

60

CENFOR 8-10

March 1970

8.10. LXF(NAME)

This function changes the XS3 characters of a word to the
corresponding Fieldata codes. If no corresponding code
exists, the character becomes an ignore or a space.

General Form

LXF(NAME)

Example

NXS3 = LXF(NAME)

where NXS3 is the XS3 word to be used as input to the
conversion; and NFD is the converted result in Fieldata,

XS3

Character

Fieldata

00

i

05

01

i

05

02

-

41

03

60

04

1

61

05

2

62

06

3

63

07

4

64

10

5

65

11

6

66

12

7

67

13

8

70

14

9

71

15

i

72

16

&

46

17

(

51

20

i

05

21

9

56

22

•

75

23

•

>

73

24-

A

06

25

B

07

26

C

10

27

D

11

30

E

12

31

F

13

32

G

H

33

H

15

34

I

16

35

#

03

36

t

05

37

@

00

XS3

Character Fieldata

40

tab

05

41

it

05

42

1

05

43

)

40

44

J

17

45

K

20

46

L

21

47

M

22

50

N

23

51

24

52

P

25

53

Q

26

54

R

27

55

\$

47

56

y.

50

57

1

05

60

T

05

61

J3

05

62

:

53

63

+

42

64

/

74

65

S

30

66

T

31

67

U

32

70

V

33

71

w

34

72

X

35

73

Y

36

74

z

37

75

%

52

76

—

44

77

Not Used

05

March 1970

CENFOR 8-11

8.11. LFB(NAME)

This function converts a Fieldata numerical quantity containing
no decimal points to integer binary. The input data must be
right justified in a word with any fill character to the left of
the high-order numeric. If signed, the sign must be adjacent to
the high-order numeric.

General Form

LFB(NAME)

Example

NBIN = LFB(NFD)

The following are legal inputs
INPUT

A A A A 64

000100

#-100

A A \$010
+00012
-00008
CRA+10
999AA1

A AAA A A

A A A A A -
Zi A A A A +

%. v_ -V. A4 .X. .V.

ABCDEF
-099.1

INTEGER BINARY RESULT

000000000100
0000000001AA

777777777633
000000000012
00000000001A

777777777767
000000000012
000000000001
000000000000
777777777777
777777777777
000000000000
000000000000
000000000000
000000000001

CENFOR 8-12

March 1970

8.12. LXB (NAME)

This function converts an XS3 numerical quantity with the same
restriction as imposed on the function LFB.

General Form

LXB (NAME)

Example

NBIN = LXB (NXS3)

8.13. LBF (NBIN, NFILL)

This function converts an integer binary number to a Fieldata
word with fill characters inserted to the left of the converted
numeric digits if the conversion produces less than six characters.
If the converted number results in more than six numeric characters,
the value becomes "##*##*".

General Form

LBF (NBIN, NFILL)

Where NBIN is the integer binary number to be converted
and NFILL is a word of Fieldata fill characters

The following are examples of input and output:

NBIN NFILL CHARACTERS ON OUTPUT

000000000100
777777777677
000000000000
777777777777
000000000K4
347536UA072
777777777633
00000000000\$
430241633705
000000000200
000000000014

AAAAAA

AAAA64

AAAAAA

AAA-64

AAAAAA

AAAAA0

AAAAAA

AAAA-0

AAAA\$A

A\$A100

AAAAAA

******

iiiiii

ii-100

AAACRA

AACRA5

iiiiii

******

AAAAAf

AA+128

AAT0T=

TOT-12

March 1970

CENFOR 8-13

8.13. LBF (NBIN, NFILL) (Continued)
Example 1 :

a) DATA NFILL/lH^/

NFD = LBF (NBIN, NFILL)
or

b) NFD = LBF (NBIN, 1HA)

Example 2 :

DATA NFILL /001010101010l/

NXS3 = LBF (NBIN, NFILL)

Example 3 •

a) DATA
NFD =

or

b) NFD =

NFILL /0/

LBF (NBIN, NFILL)

LBF (NBIN, 0)

8.14. LBX (NBIN, NFILL)

This function converts an integer binary number to an XS3 word
with fill characters inserted to the left of the converted numeric
digits if the conversion produces less than six characters. If
the converted number results in more than six numeric characters,
the value becomes 'hbhhhhhi .

General Fo]

vm

LBX (NBIN, NFILL)

Where NBIN is the
and NFILL is a word

integer
of XS3

binary number to
fill characters.

be

converted

Example

NXS3 = LBX (NBIN, NFILL)

Examples for input and output are the same as those for
LBF.

CENFOR 8-14

March 1970

8.15. MSR UHxxxx)

This FORTRAN function allows a program to access "real time"
information such as the date, time of day, job identity, and
the machine identification code.

General Form

MSR UHxxxx)

Where xxxx requests the following:

a) DATE - The current date in Fieldata will be

returned as the value in the format: MMDDYY.

b) TIME - The time of day in milliseconds in integer

binary is returned. This is wall-clock
time. It is not useful for calculating
the program's run time.

c) JRID - The value returned will be the Job Request

Identity of the program in Fieldata, left
justified, space filled to the right.
(The JRID is not necessarily the program
name. )

d) MACH - A single right- justified Fieldata char-

acter with binary zero fill to the left
will be supplied as the value which repre-
sents the machine on which the program is
running :

"A" is the 1107A

"B" is the 1107B

"C" is the 1108C

"D" is the 1108D

Examples

1) NA

2) NB

3) NC

4) ND

MSR (4HDATE)

MSR UK-TIME)

MSR (4HJRID)

MSR (4HMACH)

9. CENSUS LIBRARY SUBROUTINES

March 1970 CENFOR 9- 1

CENSUS LIBRARY SUBROUTINES

The following are the CENSUS-written library subroutines available:

CHKDIV(\$n) Divide fault recovery

NOCHK Turn off divide fault recovery

TYPE (n, nH MESSAGE) Display message

or
TYPE (n, nH MESSAGE, j , REPLY) Wait for a reply to a message

CHANGE (unit,n,nH MESSAGE, \$) A message to change a tape unit

INSRTf (NA,NB,n) Insert into a word

INSERT (NA, NARRAY,n) Insert into an array

LDStt (NA,NB,n,NC,ND) Shift and store two words

MOVEf (NA,n,NB,m) Move a field from one array to another

LB2X (NBIN, NXS3, NFILL) Integer binary to 2-word XS3

LB2F (NBIN, NFD, NFILL) Integer binary to 2-word Fieldata

UNPK (INPUT, EDIT, CORE) Unpack fields into separate words

PACK (CORE, EDIT, OUTPUT) Pack characters into fields of an array

SORT (LFILE,LPAR) Sort an internal array of fixed-length items

CENFOR 9- 2

March 1970

9.1. CHKDIV (\$n)

General Form

CALL CHKDIV (\$n)

where "n" is any statement number to which the logical flow
is to be transferred when a divide fault occurs.

All divide faults (characteristic underflow, characteristic over-
flow, and divide overflow) occurring in a FORTRAN program will
automatically return a result of zero.

The execution of CALL CHKDIV (\$999) will interrogate the divide
fault Indicators. If any divide fault has occurred, control
will be transferred to the statement labeled 999. All divide
fault Indicators will be reset at this point. The programer has
control and may take any action deemed necessary.

9.2,

NOCHK

General Form

CALL NOCHK

The execution of this statement will "turn off" the divide recovery
feature. Any divide fault will then result in an error termina-
tion and dump.

March 1970

CENFOR 9- 3

9.3. TYPE (n, nHMESSAGE)

To display a message on the console printer.

General Form

CALL TYPE (n, nHMESSAGE)

where "n" is the number of characters
to type and "MESSAGE"
is any Hollerith message
(in Fieldata) to be displayed
on the console printer

Example 1 :

DIMENSION NMES(3)

DATA NMES /17HTHIS IS A MESSAGE/

CALL TYPE (17, NMES)
Example 2 :

CALL TYPE (17, 17HTHIS IS A MESSAGE)

CENFOR 9- 4

March 1970

9.4-. Type ( n , nHMESSAGE , j , JREPLY )

To ask a question which is displayed on the console printer and to
wait for a reply to be typed by the operator.

General Form

CALL TYPE (n, nHMESSAGE, j, JREPLY)

where "n" is the number of characters to type and "MESSAGE"
is any HOLLERITH message (in Fieldata) to be displayed on the
console printer, and where "j" is the maximun number of
which the left justified HOLLERITH characters of the reply
will be stored with space fill.

Example :

CALL TYPE (21,21HTYPE INPUT REEL COUNT, 1, NCOUNT)

To display a message calling for the loading of a tape unit.

General Form

where "u" is a FORTRAN unit number on which the tape is
to be loaded, "n" is the number of characters in the
"MESSAGE," and \$999 is a statement label to which the
subroutine will exit if there is a "N" reply to the load
message which precedes the programer's message.

Example :

CALL LOAD (10,11, 11HMASTER FILE, \$1000)

March 1970

CENFOR 9- 5

9.6. CHANGE (u,n,nHMESSAGE, \$999)

To display a message calling for the changing of a tape unit.

General Form

CALL CHANGE ( u , n , nHMESSAGE , \$999)

where "u" is a FORTRAN unit number where a tape is taken off
and a new one is mounted, "n" is the number of characters
in the "MESSAGE," and \$999 is a statement label to which the
the subroutine will exit if there is a "N" reply to the
change message which precedes the programer's message.

Example :

CALL CHANGE (10,11, HHINPUT FILEA, \$1000)

This statement will produce the following on the console printer,

nn JRID -CH 2/6 INPUT FILEA

where "2/6" is the absolute channel and unit assigned this run
to FORTRAN unit number 10(AT). A "Y" reply by the operator
will cause the statement following the CALL line to be executed.
A "N" reply will cause statement 1000 to be executed.

CENFOR 9- 6

March 1970

9.7. INSRTf (NA,NB,n)

To set the right justified contents of "NA" into a specified
field of »NB". "NA" and "NB" are whole words.

General Form

CALL INSRTf (NA,NB,n)

where "f" is the type of field and becomes a part of the
subroutine name :

f = "H" (transfer a half-word field)

f = "T" (transfer a third-word field)

f = "S" (transfer a sixth-word field)

and "n" is the position of the field in "NB" into which the
insertion will take place.

for half-word insertion: 1 or 2

for third-word insertion: 1,2, or 3

for sixth-word insertion: 1,2,3,4,5, or 6

If "n" assumes a value which is larger than logically
possible for the type of field involved, the insertion
will not occur.

Example

If "NA" = 010203040506

and "NB" = 717273747576

and the following statement is executed.

CALL INSRTT (NA,NB,3)
then the final contents of "NB" is 717273740506

March 1970

CENFOR 9- 7

9.8. INSERT (NA, NARAY, n)

To set the right justified character from "NA" into the specified
position in the array "NARAY".

General Form

CALL INSERT (NA, NARAY, n)

where "n" may assume values ranging from 1 to 6
times the dimension of "NARAY" (the total number
of characters in the array)

Example :

If the 80-word array "NOUT" contains 80 right justified characters
and the following statements are executed.

DO 10 I = 1,80

10 CALL INSERT (NOUT (l),NPRNT,l)

then the 80 right justified characters from the 80 words of "NOUT"
will be packed into the first 80 character positions of "NPRNT".

9.9. LDStt (NA,NB,n,NC,ND)

To shift a two-word field composed of "NA" and "NB" and to move
the result to "NC" and "ND" leaving "NA" and "NB" unchanged.

General Form

CALL LDStt (NA,NB,n,NC,ND)

where tt is the type of shift and forms the last two
characters of the subroutine name :

tt = "RC" (shift right circularly "n" bit positions)

tt = "RL" (shift right logically "n" bit positions)

tt = "LC" (shift left circularly "n" bit positions)

tt = "LL" (shift left logically "n" bit positions)

tt = "RA" (shift right arithmetically "n" bit positions)

Example

If "NA" = 010203040506
and "NB" = 071011121314-
and the following statement is executed:
CALL LDSRL (NA,NB,l8,NC,ND)

then "NC" = 000000010203
and "ND" = 04-0506071011

CENFOR 9- 8

March 1970

9.10. MOVEf (NA,n,NB,m)

To move a specified field from the array "HA" to a specified
field in the array "NB".

General Form

CALL MOVEf (NA,n,NB,m)

where f is the type of field to be moved and forms
the last character of the subroutine name.

f = »H" (move half-word fields)

f = "T" (move third-word fields)

f = "S" (move sixth-word fields)

'and "n" is the position of the field within the array
i"NA" and "m" is the position of the field within the
frrray "NB"

f

?"n" and "m" may assume values which fall within the
Limits of the array specified.

Example 1:

To transfer 5 successive half-word fields from one array to
another (starting at the first field in "NA" and at the
seventh field (word 4, first half) in "NB", the following
could be coded:

DO 100 I = 1,5

100 CALL M0VEH (NA, I,NB,I + 6)

Example 2:

To transfer 6 constants, stored as the right half of each
word in a six-word array, into a three-word array, packing
two constants to a word.

50

DO 50 I = 1,6

CALL M0VEH (NARRAY, 1*2, NC0N,I)

March 1970

CENFOR 9- 9

9.11. LB2X (NBIN,NXS3, NFILL)

To convert an integer binary number to a two-word XS3 numeric field,

General Form

CALL LB2X (NBIN,NXS3, NFILL)

where NBIN is an integer binary number to be converted, NXS3
is the first word of a two-word field which will contain the
converted results, and NFILL is a word of XS3 fill characters
which will be inserted to the left of the converted numeric
digits.

The following are some legal inputs

NBIN

NFILL

Hollerith Result

000000000100

A A A A A A

&AA&AAAAAA6L

777777777677

A A A A A A

AA6.AAAAAA.-bhr

000000000000

A A A A A A

A.AAAAAAAAAAQ

777777777777

A A A A A A

AAAA.AAAAAA-0

377777777777

mm

#4-359738367

^00000000000

mm

-34359738367

000000003766

A ooooo

A02038

Example 1:

XS3 space fill

DATA NFILL /0010101010101/
CALL LB2X (NBIN, NXS3, NFILL)

Example 2 :

XS3 ignore fill

CALL LB2X (NBIN,NXS3,0)

CENFOR 9-10

March 1970

9.12. LB2F (NBIN, NFD, NFILL)

To convert an integer binary number to a two-word Fieldata
numeric field.

General Form

CALL LB2F (NBIN, NFD, NFILL)

where NBIN is an integer number to be converted, NFD is the
first word of a two-word field which will contain the con-
verted results, and NFILL is a word of Fieldata fill
characters which will be inserted to the left of the con-
verted numeric digits.

Legal inputs are the same as for LB2X.

Example

or

Fieldata space fill:

a) DATA NFILL /lHd/

CALL LB2F( NBIN, NFD, NFILL)

b) CALL LB2F (NBIN, NFD, 1HA)

March 1970

CENFOR 9-11

9.13. UNPK (INPUT, EDIT, CORE)

The purpose of this subroutine is to unpack fields from input
records and to store each field into separate consecutive
locations.

General Form

CALL UNPK (INPUT, EDIT, CORE)

where INPUT is an array containing the fields of data to be
unpacked under control of EDIT format to the array CORE .

EDIT Description

The EDIT format controls the scanning of INPUT.

There is no control over placement of the unpacked fields
into CORE . Storage into CORE is consecutive. CORE is
always right justified with binary zero fill to the left.
No conversion of any type is performed on the unpacked
characters.

The least significant digit of each edit code in the array
EDIT specifies the number of characters which will be
unpacked from INPUT and placed into the next available
location in CORE .

The least significant digit may range from 1 to 6.

The repeat factor attached to the left of the least signifi-
cant digit describes the number of fields with the same size,
Writing "35" is equivalent to writing "5,5,5". The repeat
factor may range from 2 to 4096.

The negative edit code (a number preceded by - ) resets the
INPUT scan to a new word and character position. The
least significant digit is the character position and this
is preceded by the word location. This reset feature may
move the scan either forward or backward in the INPUT
record. There is no unpacking when this negative code is
used. It merely moves the scanner.

The same EDIT code string, if applicable, may be used by
UNPK and PACK.

During the first reference to UNPK, the edit codes are
analyzed and modified by the subroutine. For this reason,
the code string should not be changed by the programer.

The last edit code in EDIT must be a binary zero to termi-
nate the action.

CENFOR 9-12

March 1970

9.13. UNPK (INPUT, EDIT, CORE) (Continued)

Example :

To unpack 17 fields of the 10-word array INPUT , placing
these fields into an array CORE, the following could be
coded:

INTEGER INPUT (10), EDIT (12), CORE (17)

DATA EDIT /2, 3, 1,4,33, 26, -94, 22, 51, -76, 5,0/

CALL UNPK (INPUT, EDIT, CORE)

INPUT

12

34 5|6

B
I I

12 3 4 5 6

D ! E

I I I

1 2 3 4 5 6

G

1 2 3 4 5 6

H

'iii

1 2 3 4 5 6

I I I I

1 2 3 4 5 6

12 3 4 5 6

I I I I I I I I

1 2 3 4 5 6

12 3 4 5 6

I I I

12 3 4 5 6

LMN;CP

As a result of the above edit codes, the following locations
will contain the following fields picked up from INPUT.

Field

No. of Digits Picked Up

CORE (1)

A

2

CORE (2)

B

3

CORE (3)

C

1

CORE (4)

D

4

CORE (5)

E

3

CORE (6)

F

3

CORE (7)

G

3

CORE (8)

H

6

CORE (9)

I

6

CORE (10)

J

2

CORE (11)

K

2

CORE (12)

L

1

CORE (13)

M

1

CORE (14)

N

1

CORE (15)

1

CORE (16)

P

1

Scanner reset to -94
(word 9, digit 4)

CORE (17) Q

Scanner reset to -76
(word 7, digit 6)

March 1970

CENFOR 9-13

9.14. PACK (CORE, EDIT, OUTPUT)

The purpose of this subroutine is to pack fields from consecutive
locations into an output array specifying how many digits are to
be placed in output and the position locations.

General Form

CALL PACK (CORE, EDIT, OUTPUT)

where CORE is an array containing data to be packed into
an OUTPUT array under the control of the EDIT format. Data
from CORE is expected to be right justified.

The least significant digit of each edit code describes the
number of characters which will be packed from the next
available location in CORE into the OUTPUT array. The least
significant digit may range from 1 to 6.

The repeat factor attached to the left of a single digit
code describes the number of times the edit code is to be
applied. Writing "42" is equivalent to writing "2,2,2,2".
The repeat factor may range from 2 to 4096.

The negative edit code resets the OUTPUT scan to a new word
and character position. This reset feature may move the
scan either forward or backward in the OUTPUT record.

Fields in the OUTPUT record which are not filled by the
packing operation will have their previous contents intact.

No conversion of any type is performed on the packed characters,

The same EDIT code string, if applicable, may be used by
UNPK and PACK .

During the first reference to PACK, the edit codes are
analyzed and modified by the subroutine. For this reason,
the code string should not be changed by the programer.

The last edit code in EDIT must be a binary zero to terminate
the action.

CENFOR 9-14

March 1970

9.15. SORT (LFILE, LPAR)

The purpose of this subroutine is to sort an internal array of
fixed-length items into either an ascending or descending
sequence. This is an unsigned binary sort (used primarily for
sorting alphanumeric information) . All information to be sorted
must be contained internally in the program in a dimensioned array,

Prior to any reference to the sort subroutine, a DATA statement
must be set up which will describe the array to be sorted. The
DATA statement should appear as follows :

DATA (LPAR(l),I=l,n)/ K,ITMSIZ,N0ITMS,N0KEYS,KP1,KM1, /

where :

n is the number of parameter entries in the DATA
statement.

K is equal to for an ascending sort or
equal to 1 for a descending sort.

ITMSIZ is the number of words contained in one fixed-length
item in the array to be sorted.

NOITMS is the number of items in the array to be sorted.

is the number of key fields in each item.

NOKEYS
KP1

KM1

is a number which represents the position of the word
which contains the first or most significant key field .
(The first word of an item is word 0)

is an octal mask which is used in extracting the key
from the above word position in an item. Only the
bit positions in the key word which correspond to
"one" bits in the mask word are used as the actual key.

The preceding two parameters (KP1 and KMl) may be
repeated as required for the remaining keys in the
order of decreasing significance.

The actual CALL to the sort subroutine appears as follows :

CALL SORT

(LFILE, LPAR)

where

LFILE is the

array

to be sorted and

LPAR

refers

to

the

DATA

statement containing the

sort parameters.

March 1970

CENFOR 9-15

9.15. SORT (LFILE, LPAR) (Continued)

EXAMPLE :

To sort an array of 4- one-word items into an ascending sequence
using the third and first characters as the keys, the follow-
ing could be coded:

DIMENSION LPAR(8), LFILEU)

DATA (LPAR(I), 1=1,8) / 0,1,4,2,0,0 000077000000,0,0 770000000000 /

C*
C*

C-x-
C-x-

C*" ;

ASSUME THE FOUR ITEMS CONTAIN THE FOLLOWING INFORMATION:

LFILE(l) CONTAINS THE SIX HOLLERITH CHARACTERS: CBADEF

LFILE(2) CONTAINS THE SIX HOLLERITH CHARACTERS: CBBXYZ

LFILE(3) CONTAINS THE SIX HOLLERITH CHARACTERS: BBAZZZ

LFILE (4-) CONTAINS THE SIX HOLLERITH CHARACTERS: DCAKLL

CALL SORT (LFILE, LPAR)

C**

THEN THE ITEMS WOULD BE ARRANGED AS FOLLOWS:

LFILE(l) CONTAINS THE SIX HOLLERITH CHARACTERS: BBAZZZ

LFILE(2) CONTAINS THE SIX HOLLERITH CHARACTERS: CBADEF

LFILE(3) CONTAINS THE SIX HOLLERITH CHARACTERS: DCAKLL

LFILEU) CONTAINS THE SIX HOLLERITH CHARACTERS: CBBXYZ

CENFOR 9-16 March 1970

9.16. EX: A FORTRAN INPUT /OUTPUT SUBROUTINE

drum, IIA, or II IA tapes. This subroutine is designed for special
use and is intended in no way to replace the functions of FOLION
or FORTRAN i/O. Specifically, this subroutine may be used for
handling tapes which are in a format not compatible with the present
system, or for using drum as a random access device. Each reference
to this subroutine simply transfers information directly in and out
of core from tapes or drum. It does not recognize any special
format, nor does it provide any checksum protection.

The CALL line to perform an i/O function appears as follows:

CALL EX (NFNCT, NUNIT, NSTAT, NBUFF, NOWDS, NN)

NFNCT is a function code describing the type of i/O operation to be
performed. The various i/O function codes are listed in the
Exec manual (UP2577 Rev. 2 Appendix E).
Some of the more frequently used function codes are :

34 in = Read tape forward one block

02-, n = Write tape forward one block

16 n = Rewind tape

17 = Rewind tape with interlock

02 = Write drum

NUNIT is a Fortran unit number describing the IIA or IIIA tape unit,
or the drum channel, on which the function is to be performed.
These unit numbers are described in 10.2.6.

NSTAT is a variable into which the subroutine will set the status

code of the completed i/O operation. This variable should be
checked after every CALL to the EX subroutine. A complete
list of these status codes can be found in the Exec manual
(UP2577 Rev. 2 Appendix F) . Some of the more frequently
occurring status codes are:

= i/O operation completed normally

3 - On a read tape forward operation, there was no

U - When writing on a IIIA tape, the physical end
of tape has been reached.

NBUFF is the name of a previously DIMENSIONed buffer area. This is
the area from which information will be transferred to tape
or drum by a write operation; or, this is the area into which
information will be transferred from tape or drum by a read
operation.

March 1970 CENFOR 9-17

9.16. EX: A FORTRAN INPUT/OUTPUT SUBROUTINE (Continued)

NOWDS is the number of words that will be involved in the transfer
of information in or out of core during the I/O operation.

1 - For a write tape function, NOWDS will be the number of

words transferred from core to tape. This will also be
the physical block size on the tape.

2 - For a read tape function, NOWDS will be the maximum

number of words to transfer in from tape to core. If
the block being read Is larger than this maximum, then
the excess words at the end of the block will be
dropped — they will not be transferred into core.

3 - For a write drum function, NOWDS will be the number of

words transferred from core to drum.

4 - For a read drum function, NOWDS will be the number of

words transferred from drum to core.

NN serves the following functions:

1 - For a write tape function, NN is not coded.

2 - For a read tape function, NN will be set by the sub-

routine with the actual number of words transferred
from tape to core. For example, if NOWDS is equal to
200 and the block being read is actually 120 words in
length, then 120 words will be transferred into core
and NN will be set equal to 120 by the subroutine. If
NOWDS is equal to 200 and the block being read is
actually 250 words in length, then 200 words will be
transferred into core, the last 50 words in the block
will be dropped, and NN will be set equal to 200 by
the subroutine .

3 - For drum reads or writes, NN specifies a relative loca-

tion within the drum file where reading or writing will
take place. The relative location of the first word in
a drum file is 0. When using drum, NN is not automatically
incremented by the subroutine during a string of reads or
writes. It is your responsibility to update this relative
drum address prior to each CALL to the subroutine. For
this reason, this subroutine is particularly useful in
a drum file in a random manner rather than reading straight
through the file from front to back.

CENFOR 9-18 March 1970

9.16. EX: A FORTRAN INPUT/OUTPUT SUBROUTINE (Continued)

Examples :

To read a 120 word block from HA tape (Fortran Unit No. l) , the
following could be coded s

DIMENSION NBUFF (121)

CALL EX (34, 1, NSTAT, NBUFF, 121, NN)
C** CHECK STATUS OF COMPLETED READ:

IF (NSTAT .EQ. 3) GO TO |END-0F- RECORDING ON TAPEj

IF (NSTAT .NE. 0) STOP ERROR
C** CHECK BLOCK SIZE:

IF (NN .NE. 120) STOP ERROR

To read a series of 20 word groups from drum (Fortran Unit No. 25)
and write them out using FOLION the following could be coded:

DIMENSION NBUFF (20)

NN =

DO 50 J = 1, 100

CALL EX (34,25, NSTAT, NBUFF, 20, NN)

IF (NSTAT .NE. 0) STOP ERROR

CALL ITMOUT (6HANYFIL, NBUFF)

50 NN = NN + 20

To rewind a IIIA tape (Fortran Unit No. 10) with interlock, the
following could be coded:

CALL EX (17, 10)

March 1970

CENFOR 9-19

9.17. EXERCISES

9.17.1. Prepare the edit codes in an array NEDIT (?) to unpack

fields A, B, C, D, E, F, G, H of array INPUT (5) into an
array NWS (8). Prepare a DIMENSION STATEMENT, a DATA
STATEMENT, and a CALL to the UNPK subroutine.

INPUT

1

1

2

3

4

5

6

7

8

9

1I2

jUls

6

ll 2 1 3 J4 1 5 J6

ibb

4 5 6

1I2I3 I4I5 J6

1 1 2 1 3 1 ^* f 5 Id

1 I2 J3 1 4 I 5I 6

1I2I3I4I5 16

1 j 2 J3 |4 [l. 6

1 1 2 1 3 J 4 1 5J 6

t I2I 3I4 I5U

l/p

A

B

C

D E

F

G

H

O/P

1

ka

XjXpC

X

xj:\$x]xpqx

xpqx

xpqx

1 1 1 1 1

XIXKKIXIX

Mill

1 1 1 1 1

1 1 1 II

Mill

1 II 1 1 II

9.17.2. Prepare the edit codes in array NEDIT (?) to pack fields
A, B, C, D, E, F, G, H of an array NWS (8) into an output
array NOUT (8). Use the negative (-) indicator to reset
the pointer to the specified output location. Prepare a
DIMENSION STATEMENT, a DATA STATEMENT, and a CALL to the
PACK subroutine.

NOUT

12

o/p

3 4 5

xpcfcixpt

2 3 4 5 6

1 2 3

CD;

X)X)

4 5 6

xpqx|X|XiX

1 p |3 |4 |5 |6 1 J 2 13 4 5 |6

Ill l^P^

1 2 3 4 5 6

I I II I

12 3 4 5 6 12 3 4 5 6

12 3 4 5 6

1 2 3 4 s 6

_U_

pqx ppg I i M I

CENFOR 9-20 March 1970

9.17.1. DIMENSION NEDIT (7), INPUT (5), NWS (8)
DATA NEDIT / 2, 3, 1, 43, -51, 6, /
CALL UNPK (INPUT, NEDIT, NWS)

9.17.2. DIMENSION NEDIT (13), NWS (8), NQUT

DATA NEDIT / 2, 3, -21, 21, -34, 3, -31, 3, -54, 3, -81, 6, /

CALL PACK (NWS, NEDIT, NOUT)

10. F0LI0N

March 1970 CENFOR 10- 1

10.1. LION FORMATS

At the Bureau of the Census, LION subroutines are used for
reading and writing records in either External or Internal
formats. F0LI0N, a modification of LION, will read and write
only in the Internal format. The FORTRAN READ and WRITE
statements have been modified to use the LION External format.
Internal and External formats are described below:

The Internal format is designed for recording data in the same
form as the data appears in core store. This format is used for
those files which are to be used for internal transfer of data
within the computer system. The data need not be in absolute
binary form. Refer to 19.19.

The External format is designed for recording data in Fieldata
images for use with the punched card system or on-line High
Speed Printer. This format is used for those files which are
either input or output for the service or auxiliary routine
which controls the operation of the on-line card and printer
equipment.

10.2. FPU ON

F0LI0N is a collection of subroutines which should be used by
the programer in most instances for reading tapes and for
creating tapes in LION internal format. The other methods for
use of the EX subroutine. However, for general use, F0LI0N
subroutines should be referenced. The advantages to be gained
by using F0LI0N are many:

1. Labels may be recorded and checked.

2. Check sums and record counts are created and checked.

3. Records are collected into blocks when written and
delivered one at a time when read.

4-. Errors are displayed.

5. For 3A tapes, variable length records may be written

6. Tapes may be read backwards.

7. End-of-reel procedures may be automatic.

8. Reels may be rewound with interlock.

9. Census compatible IIA tapes (recorded with 120 words per block)

CENFOR 10- 2 March 1970

10.2.1. INTRODUCTION

FOLION is linked to a FORTRAN coded program by the use of
FORTRAN CALL statements. These CALL statements make reference
to the following functions within LION:

1. Open file

2. Item handling

3. Close reel
4-. Close file

10.2.1.1. FILE LABELS

Every file generated by the LION output subroutine will
contain a physical label block. This block may or may not
contain program file information. If some identification
in the form of a file label is required, the location of
the core image must be presented in the label argument of
the file opening statement. This label image, if present,
will be recorded at the beginning of each output file.

10.2.1.1.1. IIIA LABELS

The formation of the label image contains a date, reel
number, and N words of label information. Thus, the
label image itself consists of N+2 words. The first word
of the label array must contain the total number of words
in that label. Thus, the label array will have a length
of N+3 words. For example:

DIMENSION LABEL(7)

DATA LABEL /6,0, 01000000, 21HTHIS IS A LABEL BLOCK/

In this example LION will supply the date and the reel
numbering sequence starting with reel 1. However, if
either the date or reel number is not equal to zero, LION
will process the file with the specified date and/or reel
number. The reel number will be incremented for each
subsequent reel or file.

When a IIIA reel is written, ignores in the left half of
word 3 of the label array will signal that the label
characters which follow are to be considered as XS3 char-
acters when this tape is used as input at a later date.
When XS3 characters are required, use the octal equivalent

in the DATA statement. If Fieldata characters are desired
as the label then "01000000" should be placed into word 3
of the label array.

March 1970 CENFOR 10- 3

10.2.1.1.1. II IA LABELS (Continued)

When checking labels using the automatic feature of F0LI0N,
if it is desired to skip the check on selected words; then
the array which contains the label to be compared with the
input label may contain ignores for each word to be skipped
in corresponding positions.

10.2.1.1.2. IIA LABELS

Since there is no provision for recording the date and
reel number on IIA, the above example would appear as
follows :

DIMENSION LABEL(5)

DATA LABEL A,21HTHIS IS A LABEL BLOCK/

The four label words should be converted to XS3 before use,
10.2.2. OUTPUT SUBROUTINE

The output subroutine provides for writing tape or drum files
with data originating in a FORTRAN object program in LION
internal format.

10.2.2.1. OPEN OUTPUT FILE

The functions of the Open Output statement include the
formation of a label block for each file as well as each
reel.

Each Open Output statement must contain a unique Hollerith
file name, which is used in associating the various references
to the file. Any attempt to reopen an open file, write or
close a closed file results in a File Control error code
typed on the console typewriter.

The format of the Open Output Statement is :

CALL OPNOUT (A, B, C, D, E, F, G, H, I)

where :

A = Hollerith File name (unique to this file)

B = File Data area (previously defined in a DIMENSION

statement)
C = File Data area length (block size + 35)
For IIA, C = 155

For IIIA Fixed length items, C = 64-0 (recommended)
For IIIA Variable length items :
C = N(item length + 1) + 40
where N = No. items per block.

CENFOR 10- 4 March 1970

10.2.2.1. OPEN OUTPUT FILE (Continued)

D - Item length for fixed length items. *

= for variable length items. (See parameter C
in ITMOUT).

E = Output device. This is an integer variable or

constant. Its absolute value specifies the physical
device to be used.

F = Alternate output device. Same as E.
= if not used or when drum is used.

G = The location of the label to be written on the
output reel(s) .
= for no label.

H = File control error return statement number. After
the file control error is typed out, control will
be returned to the FORTRAN program via this state-
ment number.

= for no exit return. After the file control
error is typed, control will be returned to
EXEC at \$ERR.

I = End-of-reel return statement number. Control will
be returned to the FORTRAN program via this state-
ment number when the end of tape is detected.
= or omitted for: 1) drum files, 2) and when LION
is to perform an automatic end-of-reel procedure.

" x_ ON IIA, the item size must be fixed length to any factor of 120,

10.2.2.2. WRITE OUTPUT FILE

There are no restrictions on the number of Write statements which
may reference a single output file. Each Write statement must
contain the unique Hollerith file name assigned to the output
file.

The format of the Write statement is:

CALL ITMOUT (A, B, C)

where :

A = Hollerith File-name
B = Address of item to be written
C = Length of output item for variable length item
= for fixed length items, or can be omitted.
(See parameter D in 0PN0UT.)

March 1970 CENFOR 10- 5

10.2.2.3. CLOSE OUTPUT REEL

10.2.2.3.1. The close Reel statement is used when the user wishes to

terminate the writing of an output reel, and automatically
initiate writing on the second or subsequent reels of the
same file. Each Close statement must contain the unique
Hollerith name assigned to the output file.

The format of the Close Reel statement is :

CALL OENREL (A,B)

where

A = Hollerith File-name

B = Hollerith Tape positioning literal for
terminated reel.

One of the following alphabetic literals
should be used to indicate tape procedure:

6HREWIND: rewind without interlock
6HREWINT: rewind with interlock
6HN0REWI: no rewind

If one of the above literals is not
present, the REWINT will be the resulting
procedure.

10.2.2.3.2. The ITM0UT CALL which caused the sensing of the end of tape
will not be performed until that reel has been closed, and
the label block is written on the next reel. If the end-of-
reel argument (I) of the CALL 0PN0UT statement is equal to
zero, the end-of-reel procedures will be automatically per-
formed and control returned to the statement following the
CALL ITM0UT. However, if the end-of-reel procedure is to
be executed by the FORTRAN program, LION will exit to the
end-of-reel statement number specified by argument I of the
CALL 0PN0UT statement. After the OENREL CALL has been
performed, the item return statement must be executed to
re-enter the program sequence beginning with the last ITM0UT
CALL.

The format of the item return statement is:

CALL ITMRTN (A)
where :

A = File -name

CENFOR 10- 6 March 1970

10. 2. 2. 4-. CLOSE OUTPUT FILE

The Close file statement is used to terminate the writing of
an output file.

The format of the Close file statement is :

CALL OENFIL (A, B)

where

A = Hollerith File-name

B = Hollerith Tape positioning literal for the
terminated file.

One of the following alphabetic literals should
be used to indicate the tape procedure :

6HREWIND
6HREWINT
6HN0REWI

rewind

rewind with interlock

no rewind

If one of the above literals is not present, the
REWINT will be the resulting procedure.

For Drum argument B could be 0, or omitted.

10.2.3. INPUT SUBROUTINE

The Input subroutine provides for reading tape or drum files
written in the LION internal format.

10.2.3.1. OPEN INPUT FILE

The functions of the Open Input statement include the reading
and checking of the label block. If the label check fails,
the tape label and its image is typed on the console printer
with options for recovery. Each open input statement must
contain a unique Hollerith file name, which is used in
associating the various references to the file. Any attempt
to reopen an open file, read or close a closed file results
in a File Control error code typed on the console printer.

March 1970 CENF0R 1Q _ ?

10.2.3.1. OPEN INPUT FILE (Continued)

The format for the Open Input statement is:

CALL OPNIN (A, B, C, D, E, F, G, H, I, J, K)

where :

A = File-name (unique to this file)

B = File data area (previously defined in a DIMENSION

statement)
C = File data area length (block size + 35)

For IIA, C = 155

For IIIA Fixed length items, C = 64-0 (recommended -not required)

For IIIA Variable length items,
C = N(item length +1) + 4-0
where N = No. items per block
D = Input device. This is an integer variable or

constant, its absolute value specifies the physical

device to be used.
E = Alternate input device. Same as D.

= if not used, or when drum is used.
F = The location of the label to be compared with the

tape or drum label. Image words of are not checked. -*

= if the label checking is to be omitted.
G = An integer variable or constant indicating tape

direction.

= for forward processing.

= 1 for backward processing.
H = File control error return statement number. After

the file control error is typed out, control will be

returned to the object program via this address.

(If argument is ^ to 0. )

For IIIA Input:

I = End-of-reel return statement number. Control will be
returned to the FORTRAN program via this statement
number when the end of an input reel is detected.
= when LION is to perform an automatic end-of-reel
procedure.

* Whenever there is a label check failure, a message is typed out
giving the channel and unit, file name, image to compare (30
characters), reel number, and tape label (30 characters). A
reply of "Y" will effect an abnormal exit. If the answer is "N" ,
the assumption is that a new reel has been mounted and a new
label check initiated.

CENFOR 10- 8 Max^ 19 ?

10.2.3.1. OPEN INPUT FILE (Continued)

For IIA Input:

I = Input item size. This value will be returned via
the C parameter of the CALL ITMIN statement. *

The following two arguments are optional :

J = The location of the array to which the input file
label will be transferred.

On IIIA, the input label will be transferred
to the array as follows :

NO. OF LABEL WORDS, DATE, REEL NO., LABEL WORDS . . .

On IIA, the input label will be transferred to
the array as follows :

NO. OF LABEL WORDS, LABEL WORDS

K = Length of the array specified in the above argument (J)

Note that the array specified in the J argu-
ment of OPNIN may also be named in the G
argument of OPNOUT and the input file label
will be used as the output file label

* This value must be a factor of 120.

There are no restrictions on the number of Read statements
which may reference a single input file. Each Read statement
must contain the unique Hollerith file name assigned to the
input file.

The instructions generated by the Read statement provide for
filling the object program's request for an individual input
item. The item is moved to a specified area, and the item
length is conveyed via an integer variable.

The format of the Read statement is :

CALL ITMIN (A, B, C, D)

where

A = Hollerith File-name

B = Location of area in which the requesting item is
to be stored. This area must be a length as
large as the maximum item size to be read.

March 1970 CENFOR 10- 9

C = An integer variable into which the item length
will be stored. For IIIA Multi-file input, if
the end-of-file exit (below) is taken, C will
assume one of the following values:

C = 0, no more files follow on this tape

C ^ 0, another file follows on this tape.
In this case, to access the next file,
the normal procedure would be to close
input file with no rewind and then
reopen input file.

D = End-of-file return statement number. When
the end of file is detected, control will
be returned to the program via this state-
ment number.

An example of coding to process multi-file reels:

900 IF (NWDS) 902, ,

CALL IENFIL ( file ,6HREWINT)
CALL CHANGE (u,n,nH MESSAGE, \$999)

901 CALL 0PNIN ( file, )

GO TO label to read next record

902 CALL IENFIL ( file, 6HN0REWI)
GO TO 901

999 any ending procedure

CENFOR 10-10 March 1970

10.2.3.3. CLOSE INPUT REEL

10.2.3.3.1- The close Reel statement is used when the user wishes to
terminate the reading of an input reel, and automatically
initiate reading on the second or subsequent reels of the
same file. Each Close Reel statement must contain the
unique Hollerith name assigned to the input file.

The format of the Close Reel Statement is :

CALL IENREL (A, B)

where :

A = Hollerith File-name

B = Hollerith Tape positioning literal for
terminated reel.

One of the following alphabetic literals should be used to
indicate tape procedure:

6HREWIND
6HREWINT
6HN0REWI

rewind without interlock
rewind with interlock
no rewind

If one of these literals is not present, the REWINT will
be the resulting procedure.

10.2.3.3.2. The ITMIN CALL which detected the end of an input reel

will not be performed until that reel has been closed and
the next input label has been checked. If the end-of-reel
argument (I) of the CALL 0PNIN statement is equal to zero,
the end-of-reel procedures will be automatically performed
and control returned to the statement following the CALL
ITMIN (A, B, C). However, if the end-of-reel procedure is
to be executed by the FORTRAN program, LION will exit to
the end-of-reel statement number specified by argument I of
the CALL 0PNIN statement. After the IENREL CALL has been
performed, the item return statement must be executed to
re-enter the program sequence beginning with the last ITMIN
CALL.

The format of the item return statement is :

CALL ITMRTN (A)

where :

A = File -name

March 1970 CENFOR 10-11

10. 2. 3. U. CLOSE INPUT FILE

The Close file statement is used to terminate the reading of
an input file.

The format of the Close file statement is:

CALL IENFIL (A, B)

A = Hollerith File-name

B = Hollerith Tape positioning literal for terminated file,

One of the following alphabetic literals should be

used to indicate the tape procedure:

6HREWIND
6HREWINT
6HN0REWI

rewind

rewind with interlock

no rewind

If one of the above literals is not present, the REWINT
will be the resulting procedure.

For drum this argument could be = 0, or omitted.

10.2.3.5. NOTE ON I HA END-OF-REEL EXIT

If it is desired to gain control at the end of every reel to
determine whether to end the reading of data at this point
or not, then the end-of-reel exit may be coded to go to a
point where the following procedures should be coded. If record
counts are desired when end-of-reel is encountered, digit 3
of word 26 of the buffer area should be loaded with octal 1
before executing IENFIL.

900 CALL INSERT (1,BUF(26) ,3)

CALL IENFIL ( file)

CALL CHANGE ( u , n , nHMESSAGE ,

CALL 0PNIN ( file, )

GO TO label to read next record
999 any ending procedure

CENFOR 10-12 March 1970

10.2.4. FILE CONTROL ERRORS

All file control errors will be displayed on the console
typewriter in the format:

File-name FC ERR XXX.

where XXX is the value associated with the particular error. A
complete list of file control errors is in the LION - General
Reference Manual, UP-2581, Rev. 2.

After the typeout has been displayed LION will either terminate
the run or return control to the object program. This action
is determined by the open file statement.

The following LION file control errors have no recovery
procedures available to the FORTRAN program. These errors when
detected will result in termination via EXEC \$ERR.

F.C. ERR CODE DESCRIPTION

5 An attempt to perform a CALL ITMOUT statement
has been made, the file closed or demanding

a CALL OENREL operation.

6 An attempt to perform a CALL ITMIN statement
with the file not yet opened, or when a CALL
IENFIL or IENREL is the only legitimate opera-
tion.

7 An attempt has been made to execute the
End-of-Reel procedure on a closed input
file.

8 An attempt has been made to execute the
End-of-Reel procedure on a closed output
file.

118 The file data area being requested is occupied
by a previously opened file.

119 The number of opened files exceeds 20.

120 When opening an output file one of the
required arguments (A, B, C or E) was not
present. For opening an input file (A, B,
C, or D) was not present. For ITMIN (A, B,
or C) is not present. For ITMOUT (A or B)
is not present. For any other operations
argument A is not present.

121 The peripheral equipment definition is not
a legal value, (Peripheral definitions are
defined in NTAB\$).

122 In an item read or write, a close reel or
file, or an ITMRTN statement, the file data
area requested is not defined.

March 1970 CENFOR 10-13

10.2.5. A CODED EXAMPLE

The following program will copy a single file IIIA tape recorded
in LION internal format. The input label will be transferred to
the output tape.

DIMENSION JB1(640) ,JB2(64.0) ,ITM(20) ,LABEL(15)

CALL 0PNINUHFILA,JB1, 640, 10, 0,0, 0,0,0, LABEL, 15)

CALL OPNOUT ( 3H0UT , JB2 , 6^0 , 20 , 11 , , LABEL , , )

100 CALL ITMINUHFILA,ITM,N,\$999)

C** PROCESS 20 WORD FIXED LENGTH ITEMS **

CALL ITM0UT(3H0UT,ITM)

GO TO 100

999 CALL IENFILUHFILA)

CALL 0ENFIL(3H0UT)

END

The facility (FAC) schedule card for the above program would
appear as follows :

CENFOR 10-14 March 1970

10.2.6. FORTRAN i/O EQUIPMENT CONFIGURATION

UNIT NUMBER EQUIPMENT DESCRIPTION LOGICAL CHANNEL

- 3 Card Punch ( SERVRO tape ) MT0

- 2 Printer (SERVRO tape) MT0

- 1 Card Reader ( SERVRO tape ) MT0

+ Console Typewriter

+ 1 through + 4 II-A tapes AA through DA MAO

+ 5 Card Reader ( SERVRO tape ) MT0

+ 6 Printer ( SERVRO tape ) MT0

+ 7 through + 9 II-A tapes EA through GA MAO

+10 through 16 III-A tapes AT through GT MTO

+17 through 21+ III-C tapes AC through GC MCO

+25 through 29 Drum tables Dl through D5 MDO

with length tags LD1 through
LD5

March 1970

CENFOR 10-1\$

\$

*

o

X

< "

H.

St

-* O

O

6>

\$*y>)

«f. a t. -i

3 V-

figa^s

A 5 ^

* t *
5 § w fi

Q -Z u)

a yi a i

? H l -

■X u-> ft

*A 7 W j

uj w «i

I*!

a 5

3 2

O c

C I- D

^ u) ^

-i <n -

\-

?|o

--t

z

■2

U.'

u 1 : -

"5

ej

V- a. *

,v-

a_

v*s u>

V*

_ 5 ^ 2 "2

*2£ a * 2

<a cu — ■ J

8 J

2 v*»

tf>

J<£ a '

■5o -£

^ p * -

A v O

C *» u.' u>

Vi>- 2 a o-

c* < o vO

■**■ UJ »"*

v «- T -»

«y r « o.

3 tg « Ui

a O w : >-

o ^ * £
i ri a y

tf 2 3 2

"^

i «

V-

->

5

%

1 V-

rV

<5

! y-

o

W

i^

u*

( - VI

* * * 5

3 V- ^

-r in

T U> -
•0 2 «J \$

'I «t >» -

- !v is u»i

-c p u «**

1

1

-v»

si

3T

>-

a.

5

kO

<s^

2

3

i \

*/1

>■

Ci

UJ

VJ

c

1

»»

\

f-

\tJ

1

Q

% te

2

3

— {^

\i) ^ -/) Qt

1

CENFOR 10-16

March 1970

u) d -Z 4

o^ -v o e

V-

o

w

■2

V-

3

V-

Vj.'

i

<:

f-

v-

»-

vU

h

>/)

o

o

o

W

'

l-

.

w

3

t

A

c

UJ

7)

0-

_>

^ ^

<* <>

« c

3 1

V- H

<.

1 5

<2i o

o -»

U. C9

-w

.

>^

v Z

u>

1 \$

vb

o

<i

CJ

>-

f*

2

•z.

3 ^

uJ

o

2

o

a.

3 v-

<X

U.I

\t Z

3;

«

o»i H

O

a.

V,

y-

.< «£ u>

1 w o

I a J <^| a

. S? U. Z

' x <o <*> ^

,wPw o
J. _

? if

at'

/

>

O - v4
u> uj o

>~

01-t ;|

h :\$ £ «4 i

U) \A <J) Cu

(Q

v- -z v-

V-

K5 o & <£

>

.° v\

IT]T

h r

T

^

t Z"

v-

* u_\

V-

_i

Ui o

vn

Cu

\/> »x)

< Q-

>

I

3

^

5 *

o

Z -

o ^

->■

U> C.

u

^ v/I

Qd

March 1970

CENFOR 10-17

10.3. EXERCISES

10.3.1. To open a file using FOLION, a call must be made as follows:
CALL OPNIN (A, B, C, D, E, F, G, H, I, J, K). Write the
parameters required to open a file named 2HAT, using a buffer
named BUF, and a label comparator named LABCK, no end-of-reel
exit, and an array in which to store the new label.

10.3.2. Prepare the statement to read an item into a record array
NWS from file 2HAT. Indicate an end-of-file exit and code
for a change message.

10.3.1. CALL 0PNIN(2HAT, BUF, 640, 10,0, LABCK, 0,0,0, LABEL, 7)

10.3.2.

20

999

CALL ITMIN(2HAT,NWS,N,\$999)

GO TO 100

CALL IENFIL (2HAT)

CALL CHANGE (10, 8, 8H ANY MORE, \$9999)

CALL OPNIN (2HAT, BUF, 6^0, 10,0, LABCK, 0,0,0,LkBEL, 7)

GO TO 20

9999

11. GENERAL INFORMATION

March 1970

CENFOR 11-1

U.S. DEPARTMENT OF COMMERCE
BUREAU OF THE CENSUS

FORM
(8.6-62

BC-344

FORMERLY

60.

1

•24

HSF

OUTPUT

TABLE

LAYOUT

FORM

\'ri <*V 'w\ H (Jv H' fv

I i I j 1 1 H i \ f"; r'-

(Ti > <J>i H (n >A C~ <T> H fry >f\' |N C* ! H| K (fti t-i

ft 1

^

|m| |c- <>: H |m kn| SI k^

r-l

rim.

i

1

j

1

1 ! ■ ; i \ 1

! 1 1 1 1 i ' ■ ■

! i i 1 ; 1 j i ! i i 1 ! ! i i i ' ! ! I I j 1 1 1

mm

1 !

1

2

! ! 1 | j

; i

■

1 1 1 1

1
1

i

: i

3

IMll i

1 ;

MM

I

1

i

4

! ! 1

t\T

1 1 ! i ! ! I 1

! i 1 i

1

5

■ ■ t

! 1

i 1 ! j 1 : ! i ! [ 1 ! 1 j 1 : i . • 1 '

I i i 1 I 1 i ! 1

|!l!

6

1 i I h ' ; ■ 1 j i ■ 1 ■ i i i i i ' ; ■ ' ■ ■ 1 : 1 : 1 ' '

i

Mull M

7

.

1 ! 1 1 i 1 ! 1 1 M i ; 1 ; ! ! 1 ! 1 . : ! ; ! 1 ! 1 1 ! 1 ! 1 1 ! 1 ! I 1

i

_L

II i I 1
i 1 1 i

' 1

8

1 1 | | ; :

1 i 1 M

1 | ! j j j j ! , | ; | i : ■ : 1 ! ! j j j ; 1 1 j j i 1 1

Mm!

9;

'til
1

!' f ■ ! ! ■■ ' j 1 - ! ' ! 1 : 1 ! j M

1 1 1 i i ; s i i i i ! i : i j i j 1 ! 1 1 I ! 1 1 1

1

|

_

i ! i 1 1

10
11
12,

1 I I ! I ! •

M l '■ i : ! ' 1 : : . ■ : ] ; [ !

P

i !

JT

i j

MM

• 1 1 1 1 i i ! • 1 ! ! ' 1 ! 1 ■ ■ ! : ! i I I

: i i i i i : . ! i i i ! i : . : i ' i , ! 1 ! i , i i i

iii

MM

i

! |

1 1

III

i 1 ! i i j j 1 i i H ! i ! 1

Ml

!

I i
1

13.

' M
1,4

111 i : ! : i : ' i I : ! i : ! - ! ! I 1 i 1 !

1 M

1 M M i :

i

14

* ' i ■

I i M : ! i ■ : ' 1 ' , i i i M i ; ' ; j :

! 1 1 i 1 i

1 !

1 !

i

i I
j i

l i

15

1 1 ! !

; 1

1 1 ! ! ! 1 1 ■ j 1 ! '■ 1 ! : i ! M I 1
i 1 i i i 1 ! : ! i ; ! 1. ! 1 ! ! ; i M • ' ! !

! ! ! 1 ! j

i ! M

i i i

i
1

III!!

i i i i

16

1 i 1 1

1

1 1 j | 1 1 1 ' 1 1 ' ■ ! , i ! i ! . ; 1 1 ! ! ! ! 1 i 1 ! i 1 1 .' | 1 ! '
: 1 1 I 1 I i I- 1 ! : 1 ' 1 1 : i : ; 1 : ! i ( I 1 ( i 1 : II 1 ;

iii!

I | ! M j

1

17

! S 1 1 i i ! ! ! j ; ! ! ! i j | M M ! i ! ! 1 M 1 ' M

l ! ! ■ ;

''Mill

18

■ 1 " 1 """'

ill '

i 1 '■

! i 1 i M ; ! , : ! ; i i m 1

1 1 1 1 1 1 1 1 ::..;, i 1 ! 1 : 1 i : I 1 : ' I i ! ! 1 1

— 1

1 1

MM
M

i i

19

20.

Ml!

\

1

i ; i I j I i ( i : : , • ! : ! i ; ! ; ! ' !

; I

1 ! !

III!

I 1 1

1 1

j |

iii

i i 1 1 !

1

ii

!

21

i !
1 i

i

i

! ! 1 I I ! I M ! : ,' ' i I i I i 1 1 i 1 | | |

! i : 1 : • i 1 ; 1 . ^ ! ■ : i ' i i 1 1 i i i i i

:
i

i i i

|

22

; 1

i

1 1 1 ; 1 ! 1 i ! : i i ! : : ! : 1 1 ! ! i 1 ! I !

! 1 1 1 1 i ' '■ i i 1 : I 1

|

i

1

i

23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53

1 1 ' ; 1 1

; ! i ! 1 I 1 j ; : i ! i 1 i 1 I hi!

4_

hT

Mil

Mi

; i i i i : ; ; ; ■ . ' ' ■■ . \ ;

ii -! i ! i i i : ! ! i ! : ! 1 ill

1

1 1

! |

I j

i

M

MM

M

MMMNMiMM

1

it

1

,

I

!

j |

Mi ll

■ : : ; : : : i ; i ; i I

' i

i ! !

!

i i

i i

!

1 II

i 1

1 i 1 ! U : 1 ! i ! 1 ! i i

I 1 1
1 i '

^

I i

1

" | j | j 1

1 1 ! j i ! j i i : : ! 1 ! i ! 1 1

! 1

j

1

j

1 1 ' ! ! ' 1 ' ' ' 1

! i ! ' i i ■ i i I l i 1 1

1

! ! !

1
1

i
i

i

i

i
i

1

i
i

i 1

MM
Mm

M

i

i

i
i

i i

! ! 1

Mil:

1

! 1 ! ! ! 1
| Mill! !

i j

i

j ! ; i

i

! 1
i i

1

jT

i

i
i

i i
i.i

i i i

!

-

Vx^rrr

Mill

|[| j

! ] ! ! 1 i i i j ! l i

i

, | l_i__! t I t i ! : 1 f 1 1 1

! I
|

i

i

; : ; ' • '■ : i ■ i i i

Li ! i I.I. i it i

I

i

i

^-

^

M_L 1. i_L

1 1 1

...

"T 7

l

i

i

1 i i 1 !

i

1

!

I

.

1

1

i

!

I
i

i

i

1

I

r~

1 1

i
I !

-

i i

! !

i j ;

j

i~

^1-

h

i—

-

-

X

i

i

...

CENFOR 11- 2

March 1970

form BC-1508B

(3-3-07)

u.

S. DEPARTMENT OF COMMERCE
BUREAU OF THE CENSUS

PROGRAM

RECORD LAYOUT (FORTRAN)

RUN

1

1

2

3

4

5

6

7

8

9

1

1 [2 1 3 [ -4 J5 |6

[III)

1 J 2 1 3 | -4 5|6

1 1 1 1 1

112 pU 5|6
1 1 1 1 1

1J2 [ 3 |4 ] 5 6

1 2 3 4 5 6

12 3N56

1 2 3 4 5 6

12 3 4 5 6
1 1 1 1 1

ll 2(3 1 4 |5 U

1 1 1 1 1

1 I 2 j 3 1 4 [3 1 <S

T j 2 1 3 | 4 J3

i/p

1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

O/P

M 1 1 1 1

LANG. 1

2

1

2

3

4

5

6

7

8

9

' !

1I2 3 4 3 6

1 1 1 1 1

1I2 13 u uu
1 I I 1 1

ll 2 1 3 { 4 1 5 |6

1 1 1 1 1

1 bl 3 1 4 1 5 J6

1I2I3 klslti

1 bUUMt

1 1 2 1 3 1 4 [ 5 1 6

1 I 2 I 3 I 4 I 5 I 6
1 1 1 II

'l 2 l 3 l 4 H 6

^i 2 ! 3 ! 4 ! 5 ! 6

i/p

1 1 1 1 1 1 1 1 I II 1 1 1 1 1 1 1

o/p

1 1 1 1 1 1 1 1 1 1

LANG.

3

1

2

3

4

5

6

7

8

9

1

1 12 1 S 1-4 3 |6

1 1 1 1 1

1 1 1 1 1

l] 2 3|4|5|6
1 1 1 1 1

1 |2 '| 4 P|6

1 |2 J 3 J4 5 |6

1|2 3|4 S|C

1 [ 2 j 3 1 4 J 5 J 6

1 1 2 1 3 j 4 |^ |g

Mill

M 2 ! 3 I 4 I 5 I 6

Mill

X | 2 f 3 1 4|5|6

M 2 ! 3 ! 4 1 5 1

i/p

1 1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 1 1 1 1 1

O/P

1 1 1 1 1 1 II 1 II

LANG.

4

1

2

3

4

5

6

7

8

9

1

l| 2\i\ip \6

1 1 1 1 1

I|2|9 4|5|6

1 1 1 1 1

if 2 J 3 J 4 1 3 |6

1 1 1 II

1 |2 J 3 f 4 p p

1 |2 (3 |4 5 |6

I|2 3 4 5 6

1 ' in 5| 6

1 1 2 1 3)4 56

Mill

1 1 2 [3 [ 4 j 3 6

1 1 1 II

l| 2] 3 4|5|6

M 2 ' 3 ! 4 ! 5 1

i/p

1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

O/P

1 II 1 1 1 1 II M

LANG.

5

1

2

3

4

5

6

7

8

9

1

1 2 3 4 5 6
1 1 1 1 1

123456
1 1 1 1 1

1 2 3 4 5 6
1 1 1 1 1

1 2 3 4 5 6

1 p 3 W 5 6

1 2 3K5 6

1 2 3 4 5 6

12 3 4 5 6
1 1 1 II

1 2 3 4 5 6
II 1 1 1

12 3 4 5| 6

12 3 (4 5

i/p

1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 II II

O/P
LANG.

II II 1 1 1 II 1 1

6

1

2

3

4

5

6

7

8

9

C

1 |

l| 2I 3J4 |5 1 6

1 1 1 1 1

Mill

ll 2I3I4I5I6
1 1 1 1 1

lhUNIsle

L I 2 I 3 H 5 I 6

l bl 3UI5I6

1 M 3| 4| 5 J 6

'I 2 ! 3 ! 4 ! 5 ! 6

1 M II

ll 2 [ 3I 4 1 5 j <S

1 1 1 II

'l 2 l 3 l 4 N 6

ilaUUIsltf

i/p

II 1 1 I 1 1 III 1 1! 1 1 1 1 ! 1 1

O/P
LANG.

M 1 1 1 mi M

March 1970 CENFOR 11-3

11.1. PLANNING A HSP OUTPUT TABLE

Form BC 3UU "HSP OUTPUT TABLE LAYOUT FORM" is available for
planning the spacing of a table. Each column is numbered across
the top of the sheet and each line is numbered down the sheet.
It is good planning to prepare a dummy table, with all the
required headings or spanners and stubs indicating the exact
positions where arithmetic figures are to be placed before
starting the coding of a program. This table becomes part of the
documentation of the program.

11.2. DATA RECORD LAYOUTS

Form BC 1508B "RECORD LAYOUT ( FORTRAN ) " is available for displaying
the locations of fields of data within a record. Usually this
"layout" is supplied as a part of the job specifications. Each
field may be given a name or a number. The written specifications
in conjunction with the "layout" inform the programer where fields
are located, what these fields contain, the size of a record,
and the language of the data. They are a very essential part of
the documentation of a program.

11.3. CREATING TEST DECKS

Rather than testing programs using the large amounts of data
usually found in production, it is wise to test with a test
deck, a smaller set of data which incorporates most of the possi-
bilities to be found in actual production data.

Three general methods are used to secure or to create test data.

1. The first method is to request a copy of selected

2. The second method is to write a program which generates

3. The third method is to prepare information on a coding
sheet in the form desired and to have cards punched and
taped to your requirements. There are three ways to
request this service depending upon the card volume
desired:

Amount Submit to Remarks

1 - 100 lines Special Services Branch

100 - 500 lines Input Preparation Branch

500 lines or more Input Preparation Branch Must be

scheduled
through
scheduler for

Information as to sentinels, fill characters, number of cards, tapes,
taping program to be used, and machine to be used and any other
pertinent information should be provided.

CENFOR 11- 4 March 1970

11.4. TAPE BLANKING AMD STORAGE

While testing, it is the responsibility of the programer to
periodically blank those test reels which he no longer needs.
This releases the blanks for other uses; it also makes it easier
to locate current test data. When programs become obsolete,
their names should be furnished to Special Services for disposi-
tion.

When a program is released to PRODUCTION, directions for tape
blanking and storage should be included in the operating
instructions prepared for each program or survey. Special
procedures have been established for permanent storage of vital
data and for temporary use of this data whenever needed. Channel

11.5. SCHEDULE CARDS

Before a program can be selected as a candidate for loading and
initiation, Schedule Cards must be submitted to the Executive
System. The Schedule Cards consist of a series of input parameters
to EXEC specifying the program to be initiated, its location,
information concerning the program. The schedule cards are read
by EXEC from the specified input device, checked for legality,
and stored in the schedule of Job Requests.

Every job has a minimum of three schedule cards. These are the
priority card (PTY), the facility description card (FAC), and
the last parameter card (PM. ). Certain other cards may be
present. These include the table length assignment card (TAL),
the transfer card (TRN), other parameter cards (PMN), and the
subroutine card (SUB). Their presence is optional and they are
used if specific table lengths are to be increased, if facilities
are to be transferred to succeeding jobs, if the job program
requires starting parameters which are unique to each run, and/or
subroutines are to be deleted or renamed at load time.

Special Services provides the schedule cards for an assembly, but
the programer must furnish schedule specifications for his own
programs.

March 1970

CENFOR 11-5

11.5.1. PRIORITY CARD (PTY)

The PTY card is the basic card for every job request.

FIELD
CARD COUNT

PROGRAM NAME
MEDIUM

MIX

#TIME

LIBRARY NAME

COLUMNS CONTENT

12-13 Total number of schedule cards written in
decimal notation.

17-22 Name of job as found on START card. left justified,

32 This field defines the type of input medium
on which the job program resides.

(a) "T" denotes UNISERVO IIIA

(b) "A" denotes UNISERVO IIA

(c) "C" denotes UNISERVO IVC (mc)

(d) The symbol "*" denotes that the
MEDIUM NAME field which follows
contains an absolute assignment.

60 This field assigns the job to either the
compute-limited class or to the i/O
limited class of programs.

(a) "P" denotes an i/O limited program.

(b) "C" denotes a compute-limited
program.

62-65 Up to four decimal digits giving a high
estimate, to the nearest minute, of the
central computer time needed for the
operation of the program.

69-77 This field contains the name of the library
tape. "Z" denotes that the program library
is on the same tape as the program.

Any other fields needed, such as MEDIUM NAME, will be supplied
by operations. A period will terminate the fields on each
schedule card.

* See next page for additional information,

Note: IIIC tape units are referred to as IVC tape units. These units
are IBM compatible. Only 2 units are available ner machine.
The units in our system can record at 800 bits per inch. They are
referred to as IVC tape units or uniservos.

CENFOR 11- 6 March 1970

11.5.1. PRIORITY CARD (PTY) (Continued)

-TIME (Continued)

OPTIONS FOR AUTOMATIC TERMINATION BASED UPON ESTIMATED RUN TIME

EXEC will recognize the first (high order) digit in the Estimated
Time field on the PTY card as a termination control parameter and
accept the other three digits as the estimated run time. The
parameter is effective only when the field contains four decimal
digits. If the field contains three or fewer decimal digits, the
action is an effective zero option.

The three possible uses of a parameter in Estimated Time are as
follows :

1. 0nnn (nnn=three decimal digits <51l)

For each accumulation of nnn minutes of central processor
time by the program, EXEC types "*JRID -"EXCEEDED RN TIM<s>".
There is no automatic termination.

2 . lnnn ( nnn .<5 11 )

At the first recognition that the program has accumulated
nnn minutes of central processor time, EXEC terminates the
program using E65 as the code defining termination by
reason of exceeding Estimated Time.

3. 2nnn (nnn^255)

At the recognition that the program has accumulated for
the first time nnn minutes of central processor time,
EXEC types "*JRID * EXCEEDED RN TIM <s> M . At the recogni-
tion that the program has accumulated for a second time
nnn minutes of central processor time, EXEC terminates
the program using E65 as the code defining termination by
reason of exceeding Estimated Time.

Automatic termination parameters lnnn and 2nnn will be applied
to programs now released for production only upon request

March 1970

CENFOR 11- 7

11.5.2. FACILITY DESCRIPTION CARD (FAC)

This card must be present for all jobs which are to be
executed under EXEC control. Columns 12-77 contain three
specifications, separated by commas.

(a) Amount of core needed; Approximate the number of
words of core required by the program (and the library
subroutines used) for instructions. Divide this number
by 204-8 (rounding the quotient up to the nearest whole
number) to obtain the number of IBANK required. Likewise,
divide the total number of locations needed for data

(by the program and the library subroutines used) by

2048 (again rounding up) to get the number of blocks or banks

of DBANK. In either case, add an extra block or two

when in doubt. After the program has been assembled,

the exact IBANK and DBANK values will appear on the

ELF ALLOCATION printout. List the bank with the greatest

number of blocks first; if they are equal, list IB first.

After the first good assembly, submit correct schedule cards.

(b) Tape requirements : At least one tape unit must be used*
for reading the input, and one is needed to store the
output. There are two types of tape (channels) generally
available, each with several units:

III A

II A

UNIT

TAPE

CHANNEL

UNIT

TAPE

CHANNEL

5 or -1

MT0

5 or -1

MA0

6 or -2

PRNTT

MT0

6 or -2

PRNTA

MA0

-3

PNCHT

MT0

-3

PNCHA

MA0

10

AT

MT0

1

AA

MA0

11

BT

MT0

2

BA

MA0

12

CT

MT0

3

CA

MA0

13

DT

MT0

4

DA

MA0

H

ET

MT0

7

EA

MA0

15

FT

MT0

8

FA

MA0

16

GT

MT0

9

GA

MA0

Example 1:

To schedule 2A units AA and BA (internal unit numbers 1 and 2),
deleting all other units on the 2A channel, the following FAC
card(s) should be coded:

JRID, FAC , DB/n , IB/n ,MD0/n ,MA0/2 : CA : DA : EA :
JRI D , FAC , FA : GA : READA : PRNTA : PNCHA .

*"Some programs do not require tape inputs, e.g. a test deck
generator.

CENFOR 11- 8 March 19?0

11.5.2. FACILITY DESCRIPTION CARD (FAC) (Continued)

Example 2 :

To schedule 2A units AA and BA (units 1 and 2) plus 3A unit
AT (internal unit number 10) plus the 3A PRNTT tape (internal
unit number 6 or -2), deleting all other units on the 2A and 3A
channels, the following FAC card(s) should be coded:

JRID,FAC,DB/n,IB/n,MD0/n,MA0/2: CA:DA:EA:

JRID , FAC , FA : GA : READA : PRNTA : PNCHA , MT0/2 : BT : CT : DT : ET :

JRID, FAC , FT : GT : READT : PNCHT .

Example 3 :

To schedule 3A units AT through DT (internal unit number 10
through 13), plus the 3A READT unit (internal unit number
+5 or -l), deleting all other units on the 3A channel, the
following FAC card(s) should be coded:

JRID, FAC , DB/n , IB/n , MD0/n , MT0/5 : ET : FT : GT :
JRID, FAC , PRNTT : PNCHT .

Use of IIIC tapes is restricted . * See 10.2.6 for unit numbers.
When writing tape facilities, specify how many are needed for
each channel and delete ALL OTHERS for that channel by noting
them, separated by colons, after noting the number used.
List the channel with the greatest number of tapes first.

For example :

, , FA C , MT0/3 : BT : CT : DT : ET : FT : PRNTT : GT

, ,FAC,MA0/2 : CA : DA : EA : FA : GA : PRNTA :
(c) Drum requirements: If drum tables are being used, write:

MD0/sum of all drum tables
and fill out a TAL Card.

If no drum locations are being used,
write :
MD0/0

A period follows the last entry of the FAC card.

-There is no provision for IBM formatted tapes. If a IIIC (or IVC)
tape is specified, the format is expected to be LION internal if
F0LI0N is used. When the subroutine EX is used, whole blocks are

March 1970 CENFOR 11- 9

11.5.3. TABLE LENGTH ASSIGNMENT CARD (TAL)

This card specifies increments to the minimum data table lengths
which were established by the assembler. The card makes it
possible to change at load time the amount of core or drum
working area available to the program for a given run. Its
inclusion is optional. The TAL card for drum is as follows:

, jTA^LDl/npLIE/ng, ,LD5/n .

UNIT TABLE LENGTH TAGS

25 Dl LD1

26 D2 LD2

27 D3 LD3

28 D4 LB4

29 D5 LD5

Named COMMON blocks may be extended by preceding the name of
the block with L as :

, ,TAL,LNAME/length of increase

11.5-4. TRANSFER CARD (TRN)

This card is included for a program which uses facilities
which are to be transferred to the environment of a following
program or which are to be received from other programs.

CENFOR 11-10 March 1970

11.5.5. SUBROUTINE CARD (SUB)

An EXEC ROC program can be loaded with the subroutines which are
specified as load-time subroutines in the source coding,
renamed or deleted. The card format is as follows:

,SUB,a,/b n ,a /b , . . .a /b

' ' V 1' 2' 2' n n

where

1' 2*" "' n are the names given to the load-time subroutines

b, ,b„....,b are the new names to be given to the correspond-
1 2 ' n & r

ing subroutines at entry point.

ROC means relative object coding.

11.5.6. PARAMETER CARDS (PMn)

A job program may require a set of input parameters to determine
or select options of execution. These parameters are entered via
the PMn Card, where n is a decimal digit from to 9. On the PM.
card it is necessary to write the division number and full pro-
ject number beginning in column 12. For example:

,PM. ,510083017990

Note: For fixed parameters, only one specification sheet is

needed. For variable parameters, two specification sheets
are required; part one for all other information for
scheduling and part two with all parameter information.
Also, there are separate forms for testing and production.
These are color-coded for identification. The form
numbers for testing are BC-1522 a,b,c. Those for production
are BC-1521 a,b,c. For fixed parameters, the specification
sheet is submitted only once unless changes become necessary.
When variable parameters are used, a new part two specifi-
cation sheet must be submitted with every request. When
a program is released for PRODUCTION, duplicate specifica-
tion sheets must be submitted.

Example :

Program name : EXAMPL

IB: 5000 words

DB: 9000 words

Printer output: PRNTT

3 other IIIA tapes used: AT,BT,CT

1 IIA tape used: AA

2 drum tables used: LDl/10000

LD2/5000
Total drum used: 15000
Estimated run time : 5 minutes

r» =

March JL97C

CENF0R 11-

11

OCESSING DIVISION USE ONLY

X
V
V

o s

» £
a

n

V

3
O*
V

*o

V

£

c
o

III
Q

«

>

u

Uj
X
UJ

-£
*

c

"2

D
C

3

E

c
a.

s

u
o

V

-C

c

3

•

00

•O
O

5

fS)

S

O
c»

'W

fN

00
rs

•

•

m

IT*
O

5

IN

S

<->

^»

rs
00

•

R
3

O

9

<N

S

O
CO

•

•

00

r*

■O

O

9

CM

<*>

O

00
rs

•

r>

IS

_TS

_rs

■*

fs,

n
rs

CS

rs

r^
o

On

•o

<
z

B

z

1-

CL

a

u

Ul

Q

U
<
u

1-
Z
Ul
I
Ul

x

u

z

I

K

z

UJ
_l

Ul
-J
O

<

ar

Z
<

UJ

3

<
Z

a

_j
u

EL

It,

U
O

r-»
r*.

<N

rs.

O

?

<N

■^

-O
m

O
c*»

<*
rs

ao

(S(

•0

a

UJ

r-
UJ

2
<
DC

*

a

t

•0

1^

«
u

5

ui

- 00

s \

5 M

e

CO

#

CO

-

09
■0

rs.

H-

h

r-*

0.

■

•0

r*>

III
I

LTN

in

* u '

E «

St.".

■0

•

Si

•0

c
•
E

•
u

_o
a
•

DC

I □

4

« "o

«• c

s S

J 6

or

N OTE : Do not use this form for p-
requiring more than one set of para/
cards. Use forms BC- 1522b and BC

i a

r>

so

S\

5

o

SJ>

XI *

IX

Sl

•0

to

•

LT\

eo

rs
JQ

9j

*n

3

>
1-
a.

rH

s

TS.

*

3

£

s

S

•

-

K

id

a

=c

a

*n

-

3

s

o

JS
eo

J

M

J5

.5

&•

jn
00

«n
pv

J2
•0

_Q

n

Ul

2
<
z

I

O

3

=c

jJ

c
^

DU nr.1S?2a -i-r- <• -- U. S. DEPARTMENT OF COMMERCE
S-aVl , """ Jt 5T BUREAU OF THE CENSUS

1107 EXECUTIVE SCHEDULE CARDS
FIXED PARAMETERS ONLY

O

as

H

as

M

s

En

t)
E
«

c

y

V

o

£

u

V

i

«

a

c
«
t/i
a

3
O
M

C
3
M

|

- H
c S

« M

- £

O

K

5

••

fs.

<

«

X

EH

LJ

*

3^

2

O

Bh

<N

•z.

^

a.

<

EH

6-

Eh

z

CO

a.

K

S

Eh

• •

Cj>

-Q

01

-c
o

4)

*

o

c

8

E
"5

<u

-c
j

"o

LL

C

E

TJ

c
a»

c

t

c
c

a

<*•

r*.

<c

<*>

•

CQI»

Eh

Eh

..

(N

n

.

w

<

m

n

NU

..

fc

0*

-

Eh

..

TSl

ft

<A

<N

rv.
<*m

J

-a
04

<N
(N

<N

O
<N

I
<
z

z
<

X

cr
a.

Q

<

"Sk

r*

w

ta.

^s

<S|

D

1 9

f I

o W
>

4>

&

a

c
^d

E ""■
n T3

*- Ov
w -
tfl

ag.

-

*» fc.
£ a>

zl
U.

m

..

UA

S

^.

<

rs

TS.

a

a

E^

a

Si

J

X

«!

^

■s

rs

"S.

P-,

-

-si

rs

"S.

S

ir\

•Et

"Si

rs

Ssl

•■c

■v.

<

"ti

"Si

-

Ss.

m

PQ

■Si

00

r"i

Ul

M

•s.

r^

rs

C\

■

rH

rH

to

•O

00

«rt

VTv

\

•s.

*n

Is.

■^

■

\

IS.

pH

•

'

hs.

■*

~tSi

CM

u
u

ir\

m

■a!

Q

u
tr

•>

ro

si

si

0- z
00

ISk

s:

i-J

m

rs

"Z.

.

-

•

.

III

a

>

r-

CD

ao

Ui

a
>
1-

>
a.

UJ

a.

u

<
u

u

<

u.

1

>

-J
<

UJ

a

>

Z

a

z
a:

u

a

>

r-

O
3

a

z

Q

2

2

2
a

2

a

2
a

2

CO

2

a

I

a

•
3

a.

O
O
00

rr>

r^

O
o:

-'

.

.

-

rs

m

■o
m

a:

D
IT

O

O

DC

so

c
o

> "Q

- o
OU

<

\r>

■sr

m

rs

°i

"

-

CENFOR 11-12

March 1970

form BC-559

(9-17-68)

U.S. DEPARTMENT OF COMMERCE
BUREAU OF THE CENSUS

REQUEST FOR 1107 PROGRAM PREPARATION SERVICES

Section I _ TO BE COMPLETED BY SPONSOR

PROCESSING DIV.

A. Div. code

53

B. Project number

0083300000

C. Program name

EXAMPL

F. Requested by:

D. Project name

TRAINING

E. Job number

G. Required by: (if urgent) H. Date/time submitted (Stamp)

1. NAME

JOE BLOW

2. TEL. EXT.

9999

3. RM. NO.

1600

4. BLDG. NO

3

1. DATE

2. TIME

I. Services requested (Check, unless otherwise indicated. Specify in "Remarks")

^"TREPARE^Ta. CARDS

" [0ASSY.

I | REASSY.

| | OTHER
(Specify)

<i

2. ASSEMBLE

FO-RTT^

b. 1401 C/T

□ no

□ yes

(Specify output
tape label)

a. TYPE

fpy ORIGINAL

I | REASSEMBLY*
FRAME WORK

□ UTT [J^RUTT

(1) FILL

I | IGNORE

□ ZERO

| | OTHER
(Specify)

b. CORRECTIONS
I wq NO

□ yes

(2) sentinels

□ standard

□ none

I | OTHER
(Specify,)

C. (□ OTHER
(Specify)

LIBRARY

□ NO C0YES

[^STANDARD | | OTHER
(Specify)

*Unless otherwise specified, latest CSC will be used.

Q. I I NO H/fYES*

EST'D. CENTRAL
COMPUTER TIME

MINUTES

b. IS MIDAS
USED?

G0^o

□ yes

SCHEDULE CARDS
[0SPECS ATTACHED

[^ORIGINAL

I | MODIFIED
| | SAME AS LAST TEST

d. SEQUENCE
(It any)

TEST NO

OF.

e. CROSS REFERENCE
(PROCESSING)

*Do not test if assembly warnings exceed

,4. TRAK

SCRIPTION

TYPE

| | I IA TO IIIA

[Efn

MA TO 1 1 A

b. REQUIRED

| | prior to test
□ transcribe only*

i i prior to test

[Rafter test

| | TRANSCRIBE only*

RECORD INFORMATION
□ FIXED
RECORD SIZE

I | VARIABLE

Q7j FIXED | | VARIABLE
I/O DISPOSITION

me

d. NUMBER OF TAPES (If known)
(1) IN

(2) OUT.

(Specify any pertinent file information)

(1) IN.

(2) OUT /

(Specify any pertinent tile information)

♦Attach request for 1107 tape transcription.

5. LIBRARY
MAINTE-
NANCE

a. OWN CODIN(

I I OCFP

□ OCLP

| | OTHER
(Specify)

b. EXTERNAL NAME OF
LIBRARY

C. SCHEDULE CARDS
□ SPECS. ATTACHED

I | ORIGINAL

I | MODIFIED
I | CARDS ATTACHED
' ^]SAME AS LAST REQUEST

d. CROSS REFERENCE(PROCESSING)

6. OTHER

Specify:

i-UZfc

CODING
(Number
lines)

673

of

K. Remarks

2. (□ PUNCHED CARDS

a. APPROX. NO.

b. USE (Specify)

3. OTHER (Specify)

March 1970 CENFOR 11-13

11.6. SUBMISSION OF PROGRAMS

11.6.1. Once a program has been completely coded, information indicating
your specific instructions must be referred to the Special
Services Branch in order that they will know the steps through
which to take your program. It is always necessary to attach a
"Request for 1107 Program Preparation Services" to the front of
filled out accurately with the requested information. Under
Section I, the services required by your program should be
circled in the left-most column. Information under each requested
service should be specified. Under PREPARE AND ASSEMBLE check ( y/)
whether it is an original or a reassembly. Under the label
ASSEMBLE print "FORTRAN" (or "FORELF/ELF" for a sort) to indicate
the language and note if there is to be a RUTT or an UTT. Check ( \/)
if there are corrections, if it is a reassembly, and the type of
library used. Check ( \/) YES if a test is desired, and NO under
MIDAS because MIDAS is not available to FORTRAN programers.
Note whether the schedule card specifications are attached to the
coding or they are the same as they were for the previous assembly.
If RUTT and/or UTT is requested, the details must be given under
TRANSCRIPTION. If a library subroutine is needed the name must
be specified under LIBRARY MAINTENANCE. The status of the schedule
cards must be indicated for the subroutine also, and if your OWN
CODING is present with a sort, this must also be noted. The
amount of coding and/or the number of cards or any additional
material submitted should be indicated. If more than 75 lines of
coding are submitted, a cutoff time is not assigned until the
punched cards are returned to Special Services. If fewer cards
are to be punched a cutoff time will be assigned immediately and
the punching will be done by Special Services. Any additional
information which might be helpful to Special Services may be
included under "REMARKS."

At the top of the page above the "R" in REQUEST a submission code
must be supplied according to the following code list:

CODES FOR COMPUTER SUBMISSION REQUESTS

Code Use
Systems Division Errors

Original Assembly

This category must be used for the first assembly
of each new program. Any assemblies for name changes
only should be coded as "not specified." "0" should
also be used anytime to identify straight sorts,
sorts with option coding, and merges.

1 Reassembly or Original Assembly Resulting From
Specification Changes

This category includes all changes in written or
oral instructions given to the programer after the

CENFOR 11-14 March 1970

11.6. SUBMISSION OF PROGRAMS (Continued)
11.6.1. (Continued)

Code Use

Systems i Division Errors (Continued)

2 Logic Error

Refers to programer logic only.

3 Coding Error

Covers mistakes in instruction formatting or
schedule card specifications and illegible
writing.

1+ Incomplete Test With No Reassembly Required

Includes all testing not covered above which is
required to prove in the program (new test data,
incorrect estimation of run time, different
parameter or switch options, etc.). This cate-
gory excludes incomplete tests resulting from
a Processing Division error (see Category A).

5 Production Run on Test Time

u Not Specified

Use for any condition which cannot be specified
above. Do not use without supervisor's approval,

Processing Division Errors

6 Schedule Card Error

7 Set-Up Error

8 Punch Error

9 Incomplete Test (instructions not followed
completely) .

Miscellaneous Errors

A Recreate Missing Data/Program Tapes (including

HSP tapes).

Includes bad tapes or other hardware malfunction

R Resubmission

Used by Special Services only for requests
incorrectly processed and caught prior to return
to programer

March 1970 CENFOR 11-15

11.6. SUBMISSION OF PROGRAMS (Continued)
11.6.1. (Continued)

Code Use

Miscellaneous Errors (Continued)

C Other than computer service, such as punch test

deck, print on the HSP, etc.

D Service Run on Test Time

If the program is to be assembled only, this is the only sheet
required. It, together with the coding, may then be submitted
in a designated room where you must complete this form by
stamping the date and time in the upper right-hand box. All
listings will be returned to your office.

When a FORTRAN program is submitted for a reassembly, the
programer should require that the previous PNCHT program tape
be blanked. PNCHT tapes will be held only three days in case
there should be a need for the old program.

CENFOR 11-16

March 1970

form BC-558

(3-17-67)

U.S. DEPARTMENT OF COMMERCE
BUREAU OF THE CENSUS

1107 OPERATING INSTRUCTIONS

FToETumEerTpD)

A. Oiv. code

53

G. Program
information

B. Project number

008330 0000

1. |j/f TEST

(Other than
sort/ merge)

C. Program name

EXAMPL

2. TRANSCRIPTION
| | PRIOR TO TEST

CHlTT
fj/fl RUTT

LizT*

AFTER TEST

APPROXIMATE NUMBER
OF OUTPUTS

TRAINING

3. □ SORT | | MERGE

a. OPTION CODING USED

□ OWN Q DUMMY | | NONE

b. EXTERNAL LIBRARY NAME

c. PROGRAM TO BE USED
(If other than standard)

E. Tel. Ext.

9999

4. LIBRARY MAINTENANCE
a. TYPE OF SUBROUTINE

TIME

| | ASSEMBLY
TIME

b. NO. OF COPIES REQUIRED

c. EXTERNAL LIBRARY NAME

TO BE COMPLETED BY PROCESSING DIVISION

a. BINARY TAPE NO.

b. SOURCE

I | FURNISHED
~_2 FROM

ASSEMBLY

a. OWN CODING TAPE NO.

b. SOURCE

| | FURNISHED

| FROM LIBRARY MAINTENANCE

a. OWN CODING TAPE NO.

b. SOURCE

| | FURNISHED

1 FROM ASSEMBLY

H. Magnetic
tape
input(s)

| | NONE
rj/flNOICATE

(If servo
alternation
specify in
"M")

TAPE
NUMBER

(a)

HM7301

TRANS.
TAPE NO.

(DPSD)
(b)

ASSIGNED

FACILITY

NAME

(c)

AT

EXTERNAL LABEL

(d)

DATATP

REMARKS
(e)

TRAINING SHELF

HOLD Also RUTT

I. Magnetic
tape
output(s)

| | NONE
|f/flNDICATE

(If servo
alternation
specify in

ASSIGNED

FACILITY

NAME

(a)

EXTERNAL LABEL

(b)

BT

EXAMON

CT

EXAMTW

TAPE

NUMBER

(DPSD)

(c)

TRANS.

TAPE NO.

(DPSD)

(d)

REMARKS
(e)

IIIA RUTT TO

IIA

L. Printing
instructions

1105/1107 HSP

U3

241

U3

NO. COPIES

TAPE IDENT.

AT

BT

CT

NO. BLOCKS TO PRINT

LVJmo □"

□ all

L^poo CL

.□all

[j/f'00 □.

.□all

□ 10° □.

.□all

□ 'oo □.

.□all

1107 HSP

PROGRAM TO BE USED

M. Special

instructions

USCOMM-DC

March 1970 CENFOR 11-17

11.6.2. If a test is also to be made, the schedule card coding and

and "1107 Operating Instructions" sheet must also be included.
Sections A-G are self-explanatory.

11.6.2.1. MAGNETIC TAPE INPUTS

Enter the tape number. If the tape is a previously used tape,
the number and external name may be obtained from other
persons who have used it. If a request for a CENSER CT is
submitted, you will not know the number which will be assigned
to it, but you should refer to the external label and note
that a CT will be done before the test. The next time that
data is used, refer to the number which was assigned it.

Sometimes a series of programs will be tested. In this event
the output(s) from one run may become the input(s) to another
run. This should be noted wherever applicable in order to
furnish the proper inputs to succeeding runs. Indicate the
assigned facility name as the name which was not deleted on
the schedule cards. If a production tape is to be used a copy
of it must first be made.

11.6.2.2. MAGNETIC TAPE OUTPUTS

Similarly, with the output tapes, the assigned facility name
should be indicated as with the input tapes, and the external
label is whatever you wish to call it, usually the program
name. The exact disposition of all output tapes should be
specified. If the tape is to be transcribed, indicate.
If the tape is to be held, indicate HOLD. If the tape is to
be printed, indicate. If the tape is to become input to
another run, indicate.

11.6.2.3. JUMP SWITCHES

There will be no switches in FORTRAN programs.

11.6.2.4. TYPEOUTS

Note only abnormal ones. These typeouts generally require
action to either continue or discontinue running of your
program and for this reason are most important.

11.6.2.5. PRINTING INSTRUCTIONS

Indicate the board and loop desired according to the "Summary
of Characteristics of Standard High-Speed Printer Boards and
Loops" in Chapter 19. The most commonly used set is:

Board 3, loop 3

The tape identification is the same name which was referenced
under H and I "assigned facility name." Finally, indicate the

number of blocks to be printed.

CENFOR 11-18 March 1970

11.6.2.5. PRINTING INSTRUCTIONS (Continued)

A maximum of 100 blocks should be printed under test. If
more data must be printed, indicate PRODUCTION PRINTING.

When you are through testing a program, Special Services
should be told either to blank those tapes dealing with
that program, or to put them in temporary or permanent
storage.

March 1970 CENFOR 11-19

11.6.3. When the program is ready to be released for production an
"1107 Production Program Release" form must be submitted.
Sections I and II of the form must be completely filled out and
given, with duplicate, to your program coordinator with particular
attention being given to the following:

A. This form is not required for a SORTN program.

B. Note Sorts and Merges with OCFP and/or OCLP in Section II,
Item C.

C. Under Section II, omit Item F if Item E is "Initial
Release. "

D. Note carefully "type of program" (Section II, Item I) since
they go on different libraries.

E. Consider the right box of Section II, Item J to mean prior
production, not test specifications.

F. Use the left-hand box under Section II to include the
following:

(1) Note if program is coded in FORTRAN

(2) External references for a program must be noted.

CENFOR 11-20

MARCH 1970

form BC-756

(10. 7-68)

U.S. DEPARTMENT OF COMMERCE
BUREAU OF THE CENSUS

1107 PRODUCTION PROGRAM RELEASE

TO BE COMPLETED BY PROGRAMMER

Section I
AUTHORIZATION

A. Effective date and time

This form authorizes use of the program
herein specified for production use after ......

B. Submitted on

Date

"Tir

Datt

I Th

C. Authorized by

Programmer s signature

I Extension

Section II

PROGRAM

IDENTIFICATION

A. Div. code B. Project No

D. Last assembly

Date

Tir

G. Future use

J Retain test version
~] Testing completed

C. Name of program (Must be same as PRO line)

E. History

J Initial release
J Replacement for previous
production version

H. Suggested JRID

F. Disposition of previous
production version

□ Blank

] To DATA storage

I. Type of program

~2 Production program

J. Specifications for production schedule cards

'J Attached

J Test specifications reviewed
and approved for production (Date)

TO BE COMPLETED BY PROCESSING DIVISION

Section III
CONTROL

Special Services Branch

A. Type

□ Single

□ Stack

7

Group LP

B. Tape numbers

CSC

BIN

LTL

C. Librarian parameter card

Prepared by

Checked by

Section IV
OPERATIONS

Operations Branch

A. Output tape number

CSC-1

CSC-2

BIN-1 .
BIN-2 .

LTL-1 .
LTL-2

B. Outputs verified

Controller's signature

Section V
VERIFICATION

Special Services Branch

A. Processing verified and materials checked in by (Signature of S.S. Branch Representative)

Section VI
TRANSFER TO
PRODUCTION

Production Branch

A. Received by (Signature of Production Branch Representative)

USCOMM-DC

March 1970 CENFOR 11-2 1

Also, when the program is ready for release to production, the
"1107 Operating Instructions - Production" sheet must be
completed and given to the program coordinator.

Items 1 through 6 : Self-explanatory.

INPUT - Item 7 : Must be completed, especially Item 7B. This
is needed for identification as this name comes out on the
teleprinter and Edit 75 log. This is the file name used in the program.

OUTPUT - Item 8 : Must be completely filled out.

JUMP SWITCHES - Item 9 : As they apply. None in FORTRAN.

NORMAL TYPEOUTS - Item 10 : A normal typeout is defined as any
information generated by you in your program for the necessary
processing and control information that you specifically place
in your run to aid in the overall operation of this program. If
typeouts are needed that apply to sponsor information only, this
must be shown; otherwise, the operators might become confused.

Example : "X MISSING ESTABLISHMENTS - NO ACTION

ABNORMAL TYPEOUTS - Item 11 ; These typeouts generally require
action to either continue or discontinue running of your program
and for this reason are most important.

Note: Never end an "expected" or possible abnormal termina-
tion. Instead, program for a normal termination with
a typeout such as "suspend further processing - save
all outputs . "

SPECIAL NOTES - Item 13 : This category should include any
information that you feel is particularly necessary above and
beyond conditions set forth in your typeouts.

CONTROL INFORMATION - Item 14. 1 Although this item is self-
explanatory, either one of two types of control may pertain.
If "input record counts equal output record counts," so note
and no other control information should be necessary. If
control is other than that information just stated, you should
describe fully what type of control is necessary on your program
implement the standards you wish placed on your run.

FACILITY REQUIREMENTS - Item 15 : Self-explanatory.

BLANKING PROCEDURES - Item 16 : The disposition of magnetic
tapes including blanking procedures should accompany the
Operating Instructions ) prior to the time a program is released
for production.

PRINTOUTS TO - Item 17 : Self-explanatory.

REFER QUESTIONS TO - Item 18 : Self-explanatory.

CENFOR 11-22

MARCH 1970

Q)

4)

VI

Dl

,C

Oi

D

Q

OL

E

k.

~ '

2 «"

o ^

1- 2,

CD

o

LL W

CD

_0)

-

4_,

-X

c

4-^

D

0£

-Q

Cl£

2;

3

^-*

CO

d

z

^

tj

V

o

(1)

CD

qL

a.

TO

a.
re

4-1

CO

o 3

o g

CD

<u *"

Q.

a.

>x

x

1-

1-

<u

<a

Q

CN

i)

H

{/)

H

3

M-

Z)

0.

o

a.

H

J>

111

z

3

—

*-

*->

- •

CD

O

93
JO

+-

4-»

k

ro

TO

E

00

(0

^^

^^

o

o>
o

CL

0)

c

4)

to "

c -'

a)
UJ

W O

c *-'

0)
+-»
X

UJ

■~

in

hi <n

U3

O-in

O DJ

Z

o

UI

U

ou.

H

3

Z D

o

u

ZUl

oc

c

I- ir

CD

a.

CO

< ID

i

H
UJ

Q

z
o

c
o

a

oo
*->

oo
(0
*->

t/l

H

c

<o

1)

_>

O

3

**- J?

*4-

5"

o -'

Of

(fl .°.

~o

H

•;U

4-1

4-1

c

t/>

ir on

c

o

Z

i/> in

o
U

U

o

z

o « •

■— *- u

H

I/) i/> o

<

"S «

■o

UJ

a.

00

c

CD

•o
m

CO to

ip

O

o

c

00

.2? >-3

in — s ~'
i/) .-

< m

i/i —

< u

(0

K O"

6

TO
*4-

I

n-2

"<f

March 1970

CENFOR 11-2 3

c

4->

■O

c

in

CD

u

*->

O

ra

c

E

"re

1 1

c
JO

0)

<

1/)

CENFOR 11-24

March 1970

c

o

(/)

c

<u

</)

4-»

o

X

>

LU

V

ui

U

>

6

z

E

o

6

o
a:

«/>

Z

g

i/>

o

>

i-

«/>

0)

to

UJ

3

<

O

—

Of
UJ

u.

00

(J

0.

UJ

1_

Of

o

0)

oo

E
E

to

«

o
>

O

u
(/I

Q.

<

o

JL

0)

—

E
w

z

c

o

E

3

1/1

c

Q

LU

d

Z

E

.*

o
o

c

cd

CO

Q

6

1-

3

o

1-

z

OZ

Q.

I>1

J4

^

c

(0

CQ

0>

c
o

—

(U

3

E
Z

«/>

(0

E

H
Z

■o

(0

u

o

«4-
c

Ul

o

-2

Q.

C

~o

_J —

— 3

15

4-»

c

uo

c

TO

o

< LU

U

li. QL

co

-*f

in

•o

""

1

*"

^"

March 1970 CENFOR 11-25

11.6.4. (CONTINUED)

It is the responsibility of the programer to prepare this
information as completely as possible, for submission to the
Processing Coordination Branch. If this program is one of a
series, information for the entire series should be submitted
together so that this knowledge and the instructions can be
forwarded to the Processing Division as a complete "package."
This package should include a copy of flowcharts, operating
instructions and other general information deemed necessary for
the computer processing of your program(s).

TIMING : On a one-time program, this information should be
submitted to the program coordinator a minimum of 24- hours
(one full work day) ahead of the anticipated running. If a
series of programs is involved or a major segment of a census,
this information should be submitted as early as possible and
not later than seven to ten days prior to anticipated running.

In turn, these procedures will be reviewed for completeness,
typed in final form and distributed from the Processing
Coordination Branch. If you require review of these procedures
prior to release, it is your responsibility to see that the
information is supplied in ample time ahead of the time speci-
fied above.

CENFOR 11-26 March 1970

11.7. FROGRAMER RESPONSIBILITIES

1. Generate test decks, or secure test data, that will test all
paths of a program and hold testing time to a minimum.

2. Code, test, and debug the program. Use enough comments in
the program to aid in later review or modifications.

3. Prepare initial draft of operating instructions for supervisor.

-4. Note all modifications to the initial specifications in

duplicate — one copy to be filed with the program, one copy

6. Prepare a written explanation of all unique code systems used.

7. Upon completion of the program, provide documentation of the
program, including:

A. Name of program and project number.

C. Name of programer and supervisor.

D. Purpose of the program (short narrative).

E. Relationship with project (following "Program X" or
before "Program Y").

F. Computer system (programing language and machine orientation)

G. Specifications from which program was designed:

1. Input and output record layouts (where pertinent).

2. Flow Charts, logic tables, and narrative specifications.

3. Input and output file characteristics.
4-. Program restrictions and/or limitations.

H. References to other frameworks or routines (e.g., "Option
Coding Last Pass to Standard 1107 Sort Routine").

I. Operating Instructions.

J. Program printout and sample output listings.

K. Other internal documentation deemed appropriate.

This includes labels, file sequence, program size, etc.

L. Final Assembly Date.

8. Prepare schedule card request and production release.

March 1970 CENFOR 11-27

11.8. EXERCISE

Prepare a FAC schedule card indicating the need for 4-000 cells of
IBANK, 1^000 cells of DBANK, two IIIA tapes, and no drum.

, FAC, DB/5, IB/2, MT0/2: CT: DT: ET : FT: GT : PRNTT : PNCHT: READT , MD0/0.

12. ASSEMBLY, CORRECTING AND DEBUGGING

March 1970 CENFOR 12- 1

12.1. ASSEMBLY CONTROL CARDS

The present system for assembly requires that certain cards be
present at the beginning and the end of the FORTRAN statements.
These cards are referred to as START, MAP, FOR, and STOP cards.

12.1.1. THE START CARD

The first card in a program element should be the START
card of the following form:

Col. 1-7 Col. 13-18 Col. 31-32 Col. 73-78

/././.* NAME CF REWINT

Note : Col. 73-78 may be blank if a number of program sections
are to be stacked. However, the START card for the last
section should contain "REWINT."

12.1.2. THE MAP CARD

The MAP card should follow the START card of the main program
on an original assembly. Unless it is desired to change the
program name, it is not required for reassemblies.

The form of the MAP card is:

3 MAP name-^, naiae^.

where name^ is the 1 to 6 character name of zhe ROC program
produced by the FORELF run and should be the same as name 2
of the FOR Card.

Name„ is the 6-character name of the main source deck and
should be the same as name, of the FOR card.

The period following name 9 must be present.

"MAP" should start in column 3. The "@" should be in column 1.

CENFOR 12- 2 March 1970

12.1.3. THE FOR CARD

This card is required for all assemblies . It informs the
system that this is a FORTRAN assembly. It follows the MAP
card if present. Its form is:

©OPTIONS FOR name 1 , name 2 - , name3

where options are :

I print the source language

L produce complete listing with machine language

N suppress all except stated printing by the processor

P write the RB element onto PNCHT-. This is a required
option.

Z delete this element

Options may be coded as a string beginning at Column 2
(Example: @ILP FOR name.,, name^, name„).

Note: DO NOT FORGET TO CODE "FOR" AFTER THE OPTIONS.

Name-, is the source program name (in the case of a reassembly,
the same as the old name). It may be the same name as namep.

Name 2 is the updated source name (the new name). This must be
the same name as name-j_ of the MAP card.

Name 3 is the name attached to the relocatable binary output of
the compiler. This name must be the same as name 9 of the MAP
card.

When external subroutines are included in an assembly, all names
in the FOR card must be unique.

12.1.4. THE STOP CARD

This card must be placed following the last statement in the
program source deck. It is comprised of six (6) right paren-
theses beginning in Column 1. It should be followed by three
blank cards. Right parentheses may be more in number, but only
6 are required.

March 1970 CENFOR 12- 3

12.1.5. EXAMPLES OF CONTROL CARDS

12.1.5.1. Original assembly with internal and external subroutines
as part of the same program.

AAA* p R°G CF REWINT

@ MAP PR0G,PR0X.

@ILP FOR PROG, PROG, PROX

MAIN PROGRAM statements

INTERNAL SUBROUTINE statements

END

@ILP FOR SUB1,SUB1,SUBA

EXTERNAL SUBROUTINE statements
END

))))))

3 blank cards

CENFOR 12- 4 March 1970

12.1.5. EXAMPLES OF CONTROL CARDS (Continued)

12.1.5.2. Reassembly with changes to main program and a listing of
external subroutine.

AAA* PROG CF REWINT

@ILP FOR PROG, PROG, PROX

-10,10

@ILP FOR SUB1,SUB1,SUBA

))))))

3 blank cards

12.1.5.3. Original assembly to stack programs.

AAA* FPCODE CF

@ MAP FPCODE, FPC0D1.

@ILP FOR FPCODE, FPCODE, FPC0D1

program

))))))

3 blank cards

AAA* LPCODE CF REWINT

@ MAP LPCODE, LPC0D1.
@ILP FOR LPCODE, LPCODE, LPC0D1
program

))))))

3 blank cards

12.1. 5.4-. Reassembly to change program name.

AAA* NPROG CF REWINT

@ MAP NPROG, PRA.

@ILP FOR OPROG, NPROG, PRA

any corrections
))))))

3 blank cards

March 1970 CENFOR 12- 5

12.2. PROGRAM CORRECTIONS

Rather than resubmitting your entire program, with a few changes,
every time a correction needs to be made to the latest coding, it
is possible to alter only those lines which need to be changed.

Each line of the printed program has been assigned a number,
starting with 1, which is to the immediate left of your coded
statements and which is followed by a period ( . ) . You must refer
to this number to make program corrections.

All the corrections must be coded in numerical order.

There are two types of corrections which can be made: (1) lines
may be deleted, and (2) lines may be added. To add a line, the
number of the statement immediately preceding the area where the
insert is desired is referenced. An entire card is used to refer-
ence this line number; a minus (-) is placed in column 1 of the
card, and the line number immediately follows the minus. The
lines to be added are placed on the subsequent punched cards.
For example, if J = J + 1 is to be added after the tenth line of
the original coding, the correction program would be as follows:

C C

31 73

CF REWINT

PR0G2

c

c

/././.*

13
PROG

@ILP FOR
-10

PROG, PR

J =

J + 1

))))))

+ 3 blank cards

If lines are to be deleted from the original program, the same
general format is used; but after the minus the number of the
first line to be deleted is mentioned, followed by a comma,
followed by the number of the last line in that section to be
deleted. For instance,

-10, 20

will delete all lines between and including line 10 and line 20.
Lines may replace these deleted ones by placing the new coding
immediately after this deletion card as in the insertion method.

C C C C

1 13 31 73

/./•/•* G00D1 CF REWINT

@ILP FOR G00D1, G00D1, MASTER
-23

INSERT CARD(S)
-4-1, 56

INSERT CARD(S)
-60,62
-74-

INSERT CARD(S)

))))))

3 blank cards

CTNFOR 12- 6 March 1970

12.2. PROGRAM CORRECTIONS (Continued)
The example will:

(1) Insert N number of cards following card number 23.

(2) Delete cards number 4-1 - 56 and insert N number of
cards following card number 4-0.

(3) Delete cards number 60 - 62.

(4-) Insert N number of cards following card number 74-.

March 1970 GENFOR 12- 7

12.3 FORTRAN DEBUGGING

A number of areas must be assumed as prior knowledge prior to the
discussion of debugging of any computer program. In FORTRAN for
the Univac 1107, certain basic concepts (not generally developed
as necessary to FORTRAN programers) must be developed prior to
actual program debugging.

The Univac 1107 executes production under control of a master
program - EXEC 1. This master program assigns each scheduled pro-
gram to a specific area within the computer and designates which
specific units of peripheral equipment will be used by the operating
program for each run. The internal memory assigned by EXEC will
normally be divided into two separate physical areas within the
computer, designed as Instructions (IBANK) and Data (DBANK).
The IBANK instructions are executed sequentially to effect the
execution of the program, and the DBANK contains buffers, constants

and similar information.

Three types of error situations are detected by the FORTRAN
compiler and flagged on the FORTRAN compilation listing. These
are: (a) Diagnostic messages, where it appears to the compiler
that bad form or judgment may have been used, (b) Error messages,
where it is obvious to the compiler that bad form has been used,
and (c) Fatal Error messages, where the compiler is unable to
interpret the source program.

Other types of errors, either clerical or logical, may be undetected
by the FORTRAN compiler. These are the types of errors which are
most difficult to locate and resolve. In some cases these errors
are undetected until the programer reviews the result of several
test runs. However, in many cases, they will cause the program
to be terminated abnormally prior to the completion of his test-
ing runs.

The EXEC program provides materials which can be helpful in
locating this type of error. These are the program termination
log — prepared by EXEC when the program has reached termination,
the program trouble dump, which accompanies the termination log
if the termination was abnormal, and the message log (a listing
of all typeins and typeouts for a program) .

Abnormal terminations are divided into three classifications:
Operator Termination, EXEC Termination, and Error Termination.
The classification of errors will be noted on both the trouble
dump and the termination log. Operator terminations may or may

not be accompanied by a trouble dump. This class of termination
is initiated by a console message from the operator in which the
option "dump the program" or "do not dump the program" is included
in the message. EXEC terminations are initiated when the EXEC
program detects an illegal situation, instruction, or sequence.

CENFOR 12- 8 March 1970

12.3 FORTRAN DEBUGGING (Continued)

Error terminations are initiated by the program or its subroutines
when an invalid situation is encountered and no recovery is possible
or probable. In FORTRAN both EXEC and Error terminations provide
a trouble dump.

The termination log provides certain amounts of control information.
For debugging purposes the helpful entries will be: (a) Date and
Wall Time, which show when your program was ended, (b) Facility
Assignments, the areas of core and drum and the items of peripheral
equipment which were initially assigned to your program. An
additional time (PROCEED TIME) is indicated on the termination log.
The difference between PROCEED TIME and Termination Log WALL TIME
will indicate the time your program was running (Time Sharing)
in the computer. The RUN TIME entry will indicate the time your
program kept control. This entry will never be less than 00: 00:
01 if a PROCEED TIME is indicated. The termination log will
indicate NORMAL, EXEC, ERROR, or 0PER for the type of termination
and the machine address where the last instruction was executed.
If the termination is EXEC it will be followed by an additional
error code indicating the type of error. Other types of terminations
do not provide error codes for FORTRAN programs.

The program trouble dump is divided into three areas. The first
is a visual octal image of the thin film control registers. The
second and third are the octal contents of the IBANK instructions
and the DBANK buffers, data and constants. These latter areas are
designated as BANK1 and BANK2. Care should be used in transcrib-
ing the octal contents of these areas into Instructions. BCDXS3,
Fieldata, Real or Integer values. The trouble dump illustrates
eight memory locations per line, preceded by a six-position octal
address for the first location on each line.

The instructions on your compilation listing are compressed,
BANK1. To locate a comparable instruction:

If the initial address of BANK1 = 130000

This is the memory location where the 130050
instruction is stored

March 1970 CENFOR 12- 9

12.3. FORTRAN DEBUGGING (Continued)

The leftmost two octal digits at the trouble dump location and
on the compilation listing should agree, as this is the operation
code part of the instruction line. There probably are (or should
be) many more locations shown on the trouble dump than are indi-
cated on the compilation listing. These are the FORTRAN subroutines
and/or F0LI0N locations.

The BANK2 values are assigned to consecutive locations as indicated
by the DIMENSION statement, unless the programer elects the use
of EQUIVALENCE or COMMON statements. The areas filled by DATA
statements do not appear in sequential locations as referenced
within the program, unless the DATA statements'* reference areas
were previously dimensioned. The labels of areas created by a
DIMENSION or DATA statement are listed alphabetically on the com-
pilation listing, under the heading "Storage Assignment for
Variables." If a program contains only DIMENSION and DATA statements
the location of these areas is found by adding in octal:

If the - BANK2 starting address = 060000

plus the Data Label address 002507

(From Storage Assignment for
Variables)

062507

If a program uses the COMMON or EQUIVALENCE statement, the data
areas mentioned in these statements are handled differently.
During the ELF processing, the labels and size are listed inde-
pendently on the ELF FACILITY SYNOPSIS, under the heading CORE.
The locations are moved (in ELF listing order) to the initial
positions in BANK2. All additional areas created by a DIMENSION
or DATA Statement are displaced by the total number of core
locations indicated on the ELF listing, excluding the entries
IBANK, DBANK and \$ERR0R. If a program contains these statements,
the location of DATA areas is found by adding in octal:

The BANK 2 starting address 060000

The number of locations indicated

on the ELF listing 0024-00

The DATA LABEL (from Storage

Assignment for VARIABLES) 001307

063707

If a reference is made to LPM n , then 156 octal locations must be
added to the DBANK location. These locations occur at the beginning
of the DBANK.

In the case of external subroutines, another factor, the relative
address given in the ELF allocation, should be included in the
computation to find the location desired.

CENFOR 12-10

March 1970

12.3. FORTRAN DEBUGGING (Continued)

The 640-word area for IIIA buffer storage is divided as follows:

35 FORTRAN Control Words

1 LION Control Word

600 Data Words

4 LION Control Words

640

The 155-word area for HA buffer storage contains an initial 35
FORTRAN Control words and 120 Data words.

The 35 Control Words preceding the Buffer correspond to the SLEUTH
programer's IICON for input files and I0C0N for output files.
Certain key words within this area may aid in debugging.

Word 1 - contains the file name in FIELDATA

Word 2 - left half contains the address of the

file label/right half contains the number
of label words

Word 8 - The EXEC status word. The left-most two octal

digits contain the status of the read (or write)
just completed. A code of 00 is normal. A
list of possible status codes is in the EXEC 1
Manual, UP-2577, Rev. 2, Appendix F.

Word 9 - The leftmost two octal digits indicate the
function (READ, WRITE, REWIND, etc.) last
performed or being processed. A list of these
functions is in the EXEC I Manual, UP-2577,
Rev. 2, pg. VI - 33 to 35.

The remainder of the word is a binary code
referencing the channel and unit being used
or the drum address referenced. If the
remainder of this word is zero, no unit (or
the incorrect unit) was scheduled for this
file.

Word 28 - This word should contain the starting address of
the current data record, if this is an input
file. If no value is present (word contains
zeros) then no data has been presented to the
program. This is called the buffer position in
tne right half of the word.

Word 33 - Computed record count for input.

Cumulrtive record count (IIIA) for output.

March 1970 CENFOR 12-11

12.3. FORTRAN DEBUGGING (Continued)

The thin film images can be helpful in tracing the execution of
a program through its logical flow. Certain key registers can
tell you where a program has been or what it has done and there-
fore give the programer a general idea of where to look on the
compilation listing for clerical errors and inconsistencies.

- during an EXEC termination, the EXEC error code
is placed in this register. (See 19.5 f° r
Error Code). The left half of the register is used
for the error; the right half for the address.

- in an ERROR termination, the contents of this
register is one greater than the last instruction
executed.

\$B11 - an instruction address is placed in this register
by each reference to I/O or CALL . The address
in the register should be one (possibly more)
greater than the last READ, WRITE, CALL, etc.
executed.

\$B12-\$B15 - these registers contain the same values as \$A0 - \$A3

\$A0 - in an ERROR termination, this register contains
a negative value.

\$R1 - this is a repeat counter for single instruction

being repeated. The value in the register is the
number of repetitions remaining. Use this in
conjunction with \$R3.

for formatting and similar operations.

\$R3 - A temporary storage register, used to hold an

instruction address during a repeated instruction.
If (\$R1) = 0, then (\$R3) is one greater than the
last repeated instruction. If (\$Rl)>0, then usually
(\$R3) is two greater than the last repeated
instruction.

- \$R15 -these registers are counters (indices) for repeated
sequences - generally DO loops, where the loop
generates more than one repeated instruction. The
SLEUTH II coding on the right half of the compilation
listing will indicate the following line near (pre-
ceding or following) the DO statement:

LR , XM R(n) , (i)

R(n) is the specific R register used

(i) is one less than the desired number of iterations

CENFOR 12-12 March 1970

12.3. FORTRAN DEBUGGING (Continued)

Several unconnected DO's may use the same R register in different
areas of the FORTRAN program. On the execution of a DO loop
the number (i) is placed in R(n) and is decremented on each itera-
tion to a final value of -1 (or (777777777776) octal). If the
register contains zero, then no loop using that register was
initiated or the loop was interrupted during the final iteration.
A positive value less than (i) is the number of iterations remain-
ing in the loop.

Notes in reference to memory dump addresses:

A memory dump of a program loaded in the upper core portion
of tne HOB — module 33 or higher — -will reveal an octal difference
a dumped word. This is also true of addresses contained within the
200,000 to the location addresses contained within a dumped word or
a register to obtain the absolute address referenced. The two
exceptions to this rul are the absolute beginning addresses of the
IBANK and DBANK which appear in the display of \$EER0R+9 and
\$ERR0R+10.

facility assignments in the Termination Log do not show the
starting addresses of the IBANK .and DBANK. To locate the
starting addresses, use the following procedures:

1. locate the EXEC assigned Facility line in the message log.
An example o^ this line is:

CoDE -SORT 114/03 D17/06 020270/1144 #

114/03 indicates that the IBANK occupies three modules of
core starting in module #14. D17/06 indicates that the
DBANK occupies six modules of core starting in module #17-

2. To determine the starting address of either bank, convert
the module number to its octal equivalent and multiply by
octal 4000. For instance:

114 is module 14 . The octal equivalent is 16.
16
x 4000

70000 octal

Last Reference to F0LI0N -

Last reference to a particular file may be found by
examining word 31 of the file control table where \$B11 is stored.

Last reference to FCLI0N made by any file may be found by
adding octal 40 to the relative IBANK location of F0LICN (see the
the instruction which stores SB11 in an address. Following the
address where \$B11 is stored is the octal constant 770O77CO770O.

February 1971 CENFOR 12-13

12.4. Composition of a FORTRAN IV Compilation Listing

The sample program which follows illustrates the "L"
option listing generated by the FORTRAN IV compiler.
If the "S" option had been used, no octal and mnemonic
machine language code would appear. If the "N" option
had been used, only the identification line and terminal
messages would be printed.

The various elements listed are :

1. Time, date, machine, identification line

2. Start card line

3. "FOR" assembly line

4-. Processor version line

5. Type of element (main program, subroutine, or function)
and entry points line

6. Storage used section (block, name, length)

block - control counter for a section

name - "-CODE for instruction area

-"-DATA for non-OOMMON data area
---BLANK for blank-OOMMON data area
other names for labeled COMMON areas

length - (octal) number of storage location

7. External references (block, name)

All external subprograms and FORTRAN library subroutines
referenced are listed here with their block number
and name.

8. Storage assignment MAP

All names are sorted alphanumerically for easy reference.
Information about each entry is in the following format:

bbbT 111111 NNNNNN.
bbbb - is the number of the storage block containing the

item
T - is the type of item if it is not a label:

I - integer

R - real

D - double precision

C - complex

L - logical

blank indicates an equivalenced or dimensioned

variable that is not referenced in this element
111111 - the relative octal location of the item in

the main storage block.

- The symbolic name of the item or label. If the

item is a label, a letter (L, F, or u) follows the

label number. L indicates a transfer label, F indicates

a format label, and G indicates a transfer label

generated by the compiler.

CENFOR 12-14 February 1971

9. Source code listing

The major portion of the listing is comprised of the
source program statements and the octal and mnemonic
representations of the generated code. A line number
(decimal), followed by a period, is assigned to each
card image. These line numbers are referenced for updating
a program. Another number (an internal sequence number
in octal) is assigned to each group of information supplied
to the compiler by the FORTRAN statement. More than one
sequence number may be associated with one FORTRAN
statement. The sequence numbers are printed down the
left margin. Any diagnostic messages generated by the
compiler are prefixed with the sequence number of the
information in question. Diagnostics are interspersed
among the FORTRAN statements.

The code generated to perform operations requested by
a FORTRAN statement is generally listed following the
statement. However, the optimization capabilities of the
compiler may cause the code to be generated at a point
other than that from which it was requested. The octal
representation of the generated code is printed in
UNIVAC 1107 instruction format. Each instruction is
preceded by its relative octal location in the instruction
area of the elements. Data values assigned at compilation
time are printed in internal octal form. Each data
item is preceded by its relative location in the block
and followed by the block number. Both octal and mnemonic
representations of the generated instructions are printed
on the same line.

10. Terminal messages

Following the source listing, an end of compilation
line is printed. On this line, the total number of
diagnostic messages generated for the program unit is
printed. If errors were detected in the generated code or if
code generation was prohibited by a fatal error, a line
indicating this is printed. If a fatal error occurs,
the ELF processor (which generates relocatable code)
cannot proceed and the assembly error terminates.

11. ELF processor messages

If a reassembly, the relocatable element (third name on
FOR card) which was deleted and replaced by the new
assembly is named. If any previously assembled relocatable
elements is not reassembled; its name will appear and
is still a part of the program. At the end of all
elements the MAP statement is printed.

February 1971 CENFOR 12-15

The ELF allocation map is printed with the names of all
elements contained in a program and their respective
IBANK and DBANK octal addresses. Following the ELF
allocation map is the cross reference list of all entry
points. Next is the list of 1-0 facilities for a
FORTRAN assembly.

Then a summary of the total IBANK and DBANK requirements
in core is expressed in decimal:

CORE IBANK XXXXXX

DBANK XXXXX

N\$BLNK LN\$BLN XXXXXX {blank COMMOlD
? ? XXXXXX [named COMMON]

Drum facilities are named.

Finally, a facility statement is listed.

An example is:

** FAC,IBA,DB/2,MDO/0,MAO/lO,MTO/lO,KCO/5 .

This FAC statement is useful in preparing
specification statements necessary to run under
EXEC I. See 11.5. for instructions to prepare
schedule cards.

Note. In the case of some errors, and always in the case
of a fatal error, only the source program is listed,

CENFOR 12-16

February 1971

<

Ui

o
o

e

o_i

ir> sO

-< ro o "3 in

%0 KJ <Vi *0 vO

o o o o o
cocao
c o c c o
o o o o o

a: w cr

-. -< o c\j oo
o o o o o

O 3 3 O O

2
»-»
3
W

a

a

D

o
o

a
o

IT
U.'

o

cr
a

a

a
li-
li.

in
or

i n

c

u

_l

i

10

1

1

>

'

•-•

2

<

u

£

u

»-

a
u

X

r-

a

o

«

•—

i/i

»

tn

a

i/ -

jr

2

_;

<

L.

C

I v

<J

£

»

<

: _J

>-

ir

a

cr

<

2

I/)

O

c

K

*

o

<

%

L.

»-

•

r

c

v

_i

5

•

•—

C

v

t?

<_>

i o

■

1 o

: C

! o

X

l-

K

: Z

13

>-*

2

; c

LJ

a

_J

r^ ^ ^

>-

«

f. r* c\j

cr

L.

K

^

coo

i ^~

<.

coo

Ul

*~

1

a

sr

j

o

LJ « 2

1

c

C H <

1

_j

O < _!

1

cr

ucc

—

* * ♦

21

c

1

c

u

C

V

c

~

c c c

; o

coo

or

u

c o o

c

ir

2

a

^-

c

<
c

li.
cr

a.

c

u

o

a

u

c

2
Q
LJ
»-
><
li

r w tf> tf> t* c

l. a - — c 2 c

a ? c c o c »-

v c a >- •- s i/-.

»- U <- 2 2 2 2

k * ir \f r- c —

c c c c o —. «-i

o o o o c o o

o o o O c o o

a.

>

cr
c
ii.

ir

IT

LJ
C-

«i

c
c
»-
1/

«

IT _J

Ci IT «f

— K u »- DC r\

wcwoir rt

(T vC <\ O — <V

c o o o o o
o o o o o o
c c c o o o
o o o o o p

or -> cr cc

o o o o o o
o o o o o o
o o o o o o

c

:* U.

—I o

-t in cr ■ — o 2»
io ^ortin o

HJHMON
O O 3 O O O
O 3 O O O O
C 3 O 3 O 3
O O 3 O O O

cr ►- cr cr

3 3 C 3 3 3

o o O o c o

O O O O O 3

U. Ll x

co <

.- o. < 2 a h-

^) JHvD JO
O — ' O O rt 3

c c c © c o

O o o o o o

o o o o o o

c c c c o o

cc cr cr a

OOONWN

c c c c e o
c o c c c c
e o c- c o c

ID _i

in c
_l \C cr

r- — C U. O K

d- ir K) ki i- r-

C C, f C C* —l

o •-» «h o o o

c c c- c o e

o e c coo

c c c c c c

cr cr or

^ ^ - c o cv
cr o C c o c
cccc.cc
o c c c c o

IT

cr o

a *>
- in

"5 c

c

«

m

tr

C\J

•

~

fV

»

•

•M.

»

X

fM

w

•

x:

V

<

H

X.

<T

^

»-

C

z?

<

;

K

C <f

C'

C

v£ v£» J vC vC O
J ^ — J * O
^ ^ f. — — C

lomvcono

vC vC 3- X \0 3
3- ^ ^ J d- O

H H IO rt H O

n to iCKiioo

if >C 3 vCvOO
vO ^0 vD If) * O

i^- 1^ i«- r^ r^ o

_l ^ ^ ^( vH o

Ort(\ir,*in
c c- c c o e
o o o o o o

O O O 3 O O
O O O 3 O 3
C O C O O o

c\ cv fv. c\j rv cj

o o o o o o

c o o o o C

o o o o o o

c o

C' C)

o o

February 1971

CENFOR 12-17

UJ

Q.

m —

• cm

<r r-

I c —

ji

•4 tfi

•* L. » O

O C O «~c

o -* <s 2

— I » IS —I .

•H t *fl —* tf W W W W «H I

— CM T) ^ — 4 O -^ QwMHlLH TH-HI

»«»o.«o»o»o»o»o-»«

— rf C »- a C >- Oi-.C»-0>-c^-— i^O

cd cr < 2 cr <z C2<z<2<2in(r<s

O

o

o

1

w —

o

3 »D

a

o

Q —

o

in

S »

•

w <\l

cP O

2 io

**» _-

^ -H

CSJ M Q\

_J.rO

CM — U.

o o

o •

o - • •

0>Hrt

a

o « -

_ _

•x ^

•- o o o

o> — i o

c

■M o O

c O

2 tr

2 < <t <

0> OD O

CM

2 < «

«*•*

i _rs-is_r2_r5S_- x

I xxxxxxxxxx •

* Q - • ~ ••"3C*~«~*":*~3-"3 • • ~3 C ~. <N ~

5 C 5 <JX_<UC<J<JJ<J4J4JX_4JC _l«l 2 2 £

__+■*•_: _)+■»• _ii/i_'_j_;-"";_i-*_Ju"_j-"_i-*_jw. _i_i_io*. ~ i/i _; < i- "3_i + +

_ «, <

IT JU.

2 <X
I/! J

o

m

CM

1

Kl

o o

1 1

COO

c c c

!

o e o

_

o ^ o

o

■V -

O \D vC

•H

» _ N. X

o o o

•-H

>*- CyC

ooo

o

O _JC -

O O 3

~

Ql i-i~

o o o

o

a cm

(/) LJ •

o o o

o

e a if

3 l/> Ll

coo

o

c_>-

- c o

o

I X <r K1 — ■

«3 0_ -

K) O O

o

• 1- X V

^ o o

o

o =► V~

2 «■ V Z

KIOC

kC

>- »-t CM «

-* o o

o

>- « »<t cc

3- o c

*

<;_-_"• -or-oor-

uxc

I

I- » <s or

»

• l. x -a

-)

cr z \C x

CH (\'

rr

»

_. • ir i_

C c: O

c

u.

5 ^- — __

o c o

o

*

Ld O »CM d

o o o

o

»-H

2. •* • 2.

o o o

o

•

« cr l. ir «=

o o o

c

c

2 >- _> - U. IS.

m

« l/l X - I

o

a 2 j- x a

1

«

•— • \C —*

£T

i/i vo • •

■i

1/1 < CM *

<3

-

o * • -*

V

c » ^ —

e: c i- x u

c

~

U 2 «H « L.

•-H

•— 1

C- u-U. — X L.

*i

t-

r r ? r-- v

~ « L. K - »-

If'

<

*. K Ct «3 CM

5"

• >- E • _J

o

c

: 1 1 a if .

j

<;

o

c c:. coii<

LJ

u

S?5U O

a

Cd' «_> <

o

c-

•"»

cm

K)

inooojjo
c o o o o o
c c c c c c
o o o o o o

CM ^0.-lCM*C OvOCMvOOvOCMvOO
OOOOOOOOOOOO-SO

C CCOC CC'TCCCCCC
C OOOO OOOOOOOOO

cm •& «h r>- cm

COO CO

C C c c c

O O C O o

-I o o o
C —I o o
C G <Z C

O O O O

r<- o o

O o o
ceo
o o o

o o
o o
o o

o o

Olf. vD— (OvCCMr- OrOCMOCMO— lOrOOfOOvD— <lf)OCM
O\0OOO*COOG«*CMOOOf\jOOO»*OKCOOOrr)

r-i r~i ri r^ .—» r-i 1 "i ; *j -i n n .'T n -i n r 1 ^-™» -\ .— » — 1 -~. — * r-i .- ■ i

O O 3 O O

OHK) J

o o « o

-> o O O
"3 O 3 O

o o o o

- 03 300 0003000 0000
OOOOOOOOOCOOOOOOOOOOOOOOO
OOOC 3 3000300300000 3 O O 3 O O
OOOOOOOOOOOOOOOOOOOOOOOOO

OOOOOOOCMOOOOOOOOOCOOOOCVOO OOOO OOOO

30 00 0^000 OOOOOOCOOO^lOO
00OC0O03 3000 3COOOOOOCOOOO

rt^ooooccoooooc-croocooocooo
io* o r- «-i c- r^- r- — 'ah-— 'h^(> •- ' r- — ' r- — or-r-

oooo OOOO
O 3 3 O OOOO

OOOO
c o O O

SOeOMM^CIMOOlMCNC-NCfllOMM'ICIMO W C 1(1 H

r^oo— ir~c\cM— i h-h- Hf> wj- tHi^Hi^Hh-niN*- 1 f*- N r-'-'-Hin

I

roor^* ooio 3- zt

ho«Ch oj^-o oo

— lOOO ooo oo

OOOO ooo oo

OOOo 3CO OO

OOOO ooo oo

o o

o o
o o

o o
oo

o o

o o

CM O
0.-I

O K) ro o
C — ( •— O

4M ITo
o~* O O

J 3- O C
f^ f>- OO

ooo

ooo

ooo
ooo

— < o — I

ooo

CM O vD

r^ ^ r^

sirvCNCHtvirsir >rr- e«-icv)f. •s-ifJvcr^o.HcviOs* ir. \Dr-o ^cm^*
c c c c — i — i ^h — ^- — i — — • cm cv rv. cv. cv cm cv cv >r K) i». f, r : roKmd aada

COOO ITOOOC'OOO OOOO OOOOC.OOOOC OOOO OOOO

OOOOOC OC' OOO OOOOOOC COO OOOOOOOOO OOOc

"OOOOOOOCOOOOOCTOOOO OOOO

ccoccooocoeoc c c o c o o c- c

o

t-

c

o

OOOOO OOO OOOO

O O C O c c o c c c o

in vC r- c **
3 X & If lf>
o o o in o o
o o o m o o

O O 3 O O

C' O o c o c

c
c

cr
a

c
u

c
cv

o
u.

a

o

•3-

I
u
II

c

o
c

c
u.

tf ITvChCfO

CM

If.

\T vCufJ v£f- h- C O O O C. H « ^ C' rj R CM CM If If vf. vi O O— < w CO C^ K r fj r P" \t \P vO
C C C C: C C «- «-l •-. «~i •-•- .-i •-..-<.- .-i «~i •- .- -H »- r- ft! C Cvi C CV C C C C. C f C f P

— * k~ ro k Ki*^ if ir ir i ir vr \T \£>
KpKK ff rrrr r»rr:

f": c- c C f. C ■ ' o r r. r c f c c- r C i
OOOOwOC'OOOOOOOOOO

c r . c r c c- c c c c r <. c c <

OO CO OO OOOOOl^C C5

<- C C I

ooo

' O O 3 C 3 O O

< r a c< c c. c
o o o o o o o

CENFOR 12-18

February 1971

KJ

Ui

•

o

<x

a.

o
o
o
c
o
o
o

O

o

o

IOd

•+- a

C
+
O

o
o
o

o
a

i

i
3

a

O

o

rf» —

■^

Nl

u.

M

•.

• •»

_i «

«

_l

«

»

— <

c o

IT O

O vO

c

o

— i

< <

IO <

<I iO

o <x

«I

moo

a —

O 2 -

o2lT

-I «• *

en

— *

« — I O

tfi — I I tl>lf1

< — • — cm a -* —ii

tfl W « W **t tfl tf>
.-<O.Hrj_-HO— IO— iX-^m — il

o » o «• o - o - o • o - o

CO

— *

-i « o

« -* in

W *« -I I if- \0 «
— ID-*— -I X — I ~* CM

o«c-««o« o

»-^-^u. » o • » « o • ^o^o-a^o-o^o-oou «ti • • • o • o

C — O C C *~ — i.^-Ci-.SC^-C^-Ci-'C^-O — C^-C—O^-Cl- — • -3- O ►- ;» i-i

'-r2<z<^<i^<2<2<i:<^<2u)a:<«^:a: z

l i — ' 1 l » — *-> • — ' —I -J * — ^" -J i_

<cDoio<2c3cr<z:tr<

a

a u
-si-

's

"3 _l

IT "5

K < <i

LT _f CO

in
io

2 2

2 S

_J ♦ +

OS <i_Jxc:«J_t£<_j«i_j<i_i<t_i<t_j«a_j<i_j<_i<_)xQ:«a_i»£ _i

z_i-»-+ -i i/" _i _i _i ir. _ 3_ii/:_ji/)_ii/;_.i/"_^_iv/;_'ir:_iir_ii/5_'_!_i/'"3 u)

o
in

m

^ o

o o

c o
o c

^ o
o o
c o
o o

CM ^

o o

O C

o o

O O CM

coo

ace
o o c

J- o O

o a o
ceo
o o o

i ; . ; i I i

OoOOvDO CVIJ)HO\DOiOWiOOvOO\0(M\OWvOW>ON\DO CM iO — I

— O 3 O 3 3 003 300030030 0033 3 OOO OOO

CCCCCC OCCOCCCCCCCCCCCCCCCCCO ccc

o
c
o

a

<

in -<
mi*-

o o
o o

O O

o o
oo

O O

- o

o o
c o

CM O
3 3

:* d-
r- d-

l- ir

O O

o o
o o
c o

o o
o o

o o
o o
o o

o o
o o

^ o
o o
d- c
r»- — i

d- it

IT U"

o o
o o
o o
c c

IO IO

cm ^o
o o
o o
o o
o o

o o

o o
o c

o o

o o

o »

o o

-H St

IT IT

o o

O 3

o o
c c

3- IO IO
o O OJ

CD C3 Z)
O 3 O

o o c
o o o

o o a

O O J

o o o
o o o

o o c

o o o

IT/ O -^

o — • o

O — i c\

\D vt *r

c o o

3 O C
3 O O
C' o c

o m cm
o o o

3 O 3

O O 3

coo
o o o

o o o

O 3 3

n

j om<- <ovDc\jr s -o^cioof\joci'03-oinomovDof^ooo\D'^inom

J-0%C*OOvD033f^OOOO-H30000-HO— IO-^3CMOXOOOCM
.— IOOOOOOOOOO 00000000000000000 030— l
COO OCOO. 3 0000300300300 3 3 000 3 000000
OOOOOOOOOOOOOOCOOOOOCOOOOOOOOOOOOO
OOOOOOOOC'OOOOOOOOOOOOOOOOOOOOOOOOO

OOOOOOOOCVOOOOOOOOOOOOOOOOOOOOOOCMOO

OO OOOOCOCO— 1000030000000000 003000-<00

CCX00000CO0CCO00 0O00 0C3OC0C-3C0C3C0~

lOOOronmOOMHJO(VJO(MOWO(ViOftJO(\IO(\|C(\jOfjONHjO(MJ
—•OO • O-^OCOOOOOOOOOOOOCOOCCOCOCOOOOOOOOO

i^co •vci^-vcor^-icr-i^^^f^— "f«- — t-— , r-— r^^-r~-<r^ — r-^-r^— •c-i^r^--d

-H03t/l3-*3 0~^30-H-H3 3— 1_>— «0~*0-H3»^3-*0— IO— lOWOO— l»HOO
^■OC »3-J-CC CWM^riMCCNCNOMCWONCWCMONCIMMOaWO

r>- ooc r^r- oo^r^cucM— • r- r- — 'h--nr^— ir^— ii~-— tr--^h-— it>-— i r- «-i t» MCvi—ir- r-

o
o
o
o

a
o

o

CM

:r~ c— icMioainvcr-
■ — o. cv cv ev ^ cm cvj cv

o

k j-ircvcr- C'rH<\,i^'diTvcr^'^-icMKidin«rr- c^cvjio^it
>c \C vT »vt. >ilr'l^'^'^t^^^^-^-c ccccccc— >^— ■— ,— ■— i

OOOQ.OOOOOOOOCO—4*"" — *-^-^*n»— ~^-h— i,— — I — i— l— i^h— (— — i— t— i~*»h~* — <

OOO ••COCOOCOOOCCCOOOOOOOOOOOOCOOOOOOOOO o

OOOCOOO 3 D000003 0300000303300000030000 O

COO -CCCOCCCOCCCOCCCOOOCC-COOCOCCOCOCOCC c-

Ix i

c

*

o

1^.

o
II

c

u

o

II

ii

e

c

IT

m

N

c

xT
lO

o

IO

u
I-

a

o

i-

o
c

c
Ul

or

c cr

o

CM

CM
CM

vT \f C C C

r !• c ^ a

— — ! — > CV' IT P~ K>

3 n 3 d c j? it

ITiriTlf vT vCvTvTvC—l— iCMCV dd-L'
rc~ = d CJC'COL'L 1/ U L L- U

IP vT
If L'

vtr- i^oc-' — ac

L' U L' M. \C \l <f \l <

K r . K . Ki f vC \C/ vT — i •" i

tec

o c o

r: •:■ f~- i oornf ■-
o o o O >^ o o o o o

O O O O O O •— ' O O o

c f <. c >. :: c. c c o c; c> c > n c c c 1 1 c r c c_ c^ c< c t. c c.

/OO (_'JOOOOOO J 0003 CO ooooooo

February 1971

CENFOR 12-19

o
a

If

*

o

»*

in

r«-

o

tv

tfl S) *fl

in

a. ra a.

<M

a in o

•h

>- 3 t-

-*

inin i/»

fO

i: o -z.

t\l

- S) -

CM

~* O *4

•^

— a •*

c

23 — CD

—

■3 "3

£ S

-I + -f

0>

0>

—t — 1

^ O «i

1 o

c o

«-• o

v>

1 o

' c c

c c

c

: o

i

o o c

> o

1

* 3-

o w

o

•

o o

or-

c

> r-

_J

>—

o o

o o

c

> 3

a

"2?

O 3

o o

o

o

s:

UJ

3 3

c o

) 3

<s

2.

o o

o o

c

1 o

i/

UJ

1-

o o

c

• o

<

t-

o o

3 o

c

) 3

\f

o a

o 3

c

> C

IS

o o

K) 3

K

) o

z

c c

— • o

V"

l o

1— 1

•

jS

3- if

m c

K

*-,

o

3 3

■** o

**

1 3

l/v

_)

a- sr

* o

a

o

w

_J

r- r-

1^- O f-

o

u

c

tr

u.

IT

X

— OJ

ro 3-

M

.0

01

t_>

f. r>

fC (O

f

; i«i

L.

<

•— ~*

~- »H

—

t — *

s:

UJ

o o

o c

G

o

a.

o o

3 O

> o

♦

c. o

o o

c

c

<_

cr

•— *

u.

K

>

!/■

u.

c

z

2

_1

«3

-1

►-

«

•-*

c
♦

c

a o

»- f-

a

^»

21

c

j

c

1^

c o

K

1

4_

c

u c

\f

u

•

*-•

C

c

•

*

i

^™

»

o

]

a.

\T.

_^

U.

C !

i

U

IT •

•

|

•

u

c

•

< K)

3-

tn

tf]

«-■ <VJ

f\l

1

fvi

o

cr

o

i

■?

1

*

u

c

d-

OJ Ci c\

rv,

l<- f

r

K-,

J

kO

c

n r-r

i> r~ r-i<

I s -

f

r

o

.-• *-* --<

•-i

•-H «-<

— i

~*

•"-•

—4

;i C e r: c t: < C c f."

C CiOG»000 00 3

CENFOR 12-20

February 1971

Ul
Q.

t

m

UJ

o
o

u cr isi

cm in m
cm ^ cm
o o o

o o o
coo
o o o

cr tx a.

CM f\J CM

o o o
zoo
o o o

a
s

Ul

»-

z o onuo cl«->-^ >-i>Hin

c c

o cm cm cv

< < < <

CM a 3

< < <

3 C O O O

< < < < <

o

a: vO
a •
cr c
2: <?

s:
<
if

a
o
\f
\r

U'
U

o
a:
a.

a a r

c * c
«- — cv
o o o
o o o
ceo
o o o

cr cr

cm cm cm
o o o
o o o
o o o

<s <t«ss< «n «s «s <t < 2 isj a <*

_J U U"! _' U U (/!_< 1/ _l 4 I- I- ~3 _

HMl

C ml o

< cr<

< X <

if. .j j

m

U
U

' I/)

; •*■

; i

' C'

I o

I

1

U

_J

. i

U)

i

1

.

>

•X

2

<

cr

»-

ct

c

u

H

CD

r»

D

o

IT

«N

•

«-4

1-

—\

IT

1

a.

3

i

5

o-

I

C

2

V

UJ

.

•

<J

1

It

22

>-

K-

a

a

•

x

X

o

z

a

•u

o

?

•"<

« c

a

t-

1/.UI

c

<

»-

u

_)

»- U

»-H

— > — t

c

UUI

_)

ZL

Ci

•—•

Q

B

o

cm

m

1

o

'

o

o

o

I

►-

»-

2

e

*-*

z

C

Ul

a

-J

cm r^ ■»

>-

»

v£l O CM

a

UJ

C O c

y-

s

O O o

7

4

o c o

Ul

2

O O o

iC

5C

o

UJ < 2

K

c

c t~ <

3

_i

C < _)

a

a

UOB

>

«■»

* * *

c

u

o
u.

tl

ir

«-• c <\

2;

—

OC c

•-4

COO

»-

Ul

o o o

—

ID

c

«

!

a

a

a

c

u.

1

_1 X

2

o «t

1

f«- TH

4

2

ioioo

o

*HO

■—I

O o o

t-

o o o

<

o o a

o

o o o

c

_J

►h cr

Ul

-H CM CM

>

s o o

#-i

o o o

f-

o o o

<t

_l

u

or

.

UJ

a

>-

-J

»-

o

vC •- »~

•

^

-t rt r-

o

a- co ^*

c

c c c

_)

coo

cr

o o o

w

o o c

</>

— cr

u

_i

-< Cd CM

cr

C O C

«

c c c

•—

c o c

a.

<t

>

cr

c

u

»-

_J

2

c

U'

inur

£

"Z?

-X) vC vC

e

K> & »<

o o o

i/>

coo

if

C Cr O

«

c o c

Ul

cr

o

«

— <\ c\

CC

o o o

c

c c c

»-

o c c

o

CM CM

CM CM

CM CM -^

CM CM CM

!

c

c o

3 O

CO C |

C 3 O

!

c

c c

1

o

c

c c . c ;

c c c

c

c o

j

c

o

CO C i

3 3 3

1

•-I

K) CM

-1

j

-^ w

1 ! ]

«-l ■»-! *

o o

o

CM CM

o

*-»

CM O

(MCMOHHNO

CM CM •*

o o

o

o o

o

o

O 3

3 O 3 3 O 3 O

CD O O

o o

o

CD C

o

o

3 O

3 O O O O 3 O

o o o

c o

o

O O

3

3

3 3

3 3 3 3 O O 3

3 O O

rsl

o o

o

o o

O

o o o

O O O O O O O

o oo

O

o o

o

o o

o

o

O O

o o o o o o o

o o o

^

o o

a

O 3

3

3

o a

3 O 3 3 O 3 O

o o o

•

* w

o

3 C

^

3

3 3

O O .T 3 3 3 O

3 3 O

■;

o o

O CV CM

CM

CM

3- :T

3- O O O O O O

O-w o

t-

c o

c

c o

O

C

c o

C O O O O C O

o o o

L"

O CM

o

O CM

o

o

O f-

o o I s - o o 3- r-

coo

«

O 3

o

3 3

3

3

3 -1

3 O -* 3 3 O -<

3 3 3

a:

O vC

•-•

O vC

^D

»-!

O 3"

«H C IT O O 3 O

HhO

m

-< I s -

o — i I s - r-

o

•-I ^1

OH HlTvON H

OCM H

c

T

«

O -H

OJ

■•o a

ir

vC I s -

«h cm r^ 3- in •£ r-

O^N

^s #^

c o

c

c c

c

c

C — .

«- •— ( ^^ «-t •— 4 «-( «H

CV CM CM

C r»-

c o

o

o o

o

o

O 3

O O 3 O O O O

3 O O

o o

o

o o

o

o

O O

O O O O O c o

O O O

O CD

o o

o

o o

3

o

3 O

3 O 3 3 O O O

3 O 9

— -

o o

c

o c

O

c

C O

c o c o o c o

coo

(- CM

3 w

0. I

<c

2. «

II

C-»

»-t

O \0

i

'

Ul. X

ir

c

2 <t

•

♦

•- *-

K

*-»

1-

c

l

IT

►— 1

2 *-

+

•

*-■

O O

c

N

i

•-t

»^

X

cr s.

*

*

+

*^

«a

c >

c

o

•—

l-

z o

II

II

II

U

li

v. o

e

c.

»>-t

»^-

a

I

h(\| IO j *

— ID
c c

3 3

C Cl

l/! lf

tn

ir- «T' vO
c: c C

c c c c

I s - r- r- I s -

c c c c>

c o —. — H —

oo c

C. '. <.:. C t. t DC c c c c o c c- r • O C Cl C C' C C'
iOOOOOO^OOOOOOOOOOOOOOOO

February 1971

CENFOR 12-21

ID

(V

o

a

c

'

c

e

1

♦

♦

o

o

o

~*

o

!

o

o

ID

3

o

o

m.

o

i

o

o

*H .

o

in

in

1

3

r-

X

X

•

_J

-i

*

•

«

ro

— i o

o

~H

CVI

*-

OS

— a

01 T

i m

vO

•-»

»-

— t-

»

«

» »

• «C

* »

*

_J

*

«

_i

* »

c

o <v cv

fV *

* a

.*

o

o

c o

o o

«x

< < <

<s <.

« <t

4

»- r-

<

«lr»

< <.

1
1
1

i
1

5

>

2

4

<x 2

< <

< n:

a

N

<

4

-a «

li.

\f,

_ u

iT _I

«* i

T

IT

"^

_l

in

~z

_i l/>

<v <m m -4
* + ••■ +

a -h o o

uj o o. a.

ItLini-32^Z32-
.......... !«.««

a.

UJ

+

O >*
Q. •

< cr i

o

cr
a
a

CV CU CV

III

* < • • •

<J < «3 «3 Z X X << < < Ct C

_iiLii.a.u*_i":i/"_ii/iu*i/ , _«/:

a

! S
«S
1/

CVJ

c
c
c

vO

r-
r-

r-

r-

o
o

cvj

r-

c

3

cy o t\j

3 O O

o o o

in o *

—I O «H

O O O

COO

a s o
o o o

o o o

a o o
e 3 o

O (\ CM

CON

o o o

Or-lf^

•tf IT vC
CM C\ (V!

coo
o o o
o o o

CD C O

CVJ <\| •"•

CO 3

o c c

OS c
I

—t .-I f^ IO

o o r^ o
o o (-• o

o o r~ o

O O -H o

o o to o

O O O 3

•-333

MIS J

c o o o

c o r- o

3 3 ~H 3

-t o ^- .*

r- C ^ C\

<Y Kl !«•> K)

o o o o
o o o o

O 3 O 3

3

c

J-
o
o
o
o

C
CS,

o
r-

f

O

o
o

c

3 3

c c

r- ro

~4 ^
O 3

o o

3 a

o o

3 3
C 3

O O

o c
o j-

O 3

IT) *

» IT.

K". f-

O 3

O O

O O

c o

_l
o
in

o
c

O

o

o

O

o

o

c

3

o

o
o

3 3
C C

o o

I

r-m

— 1 3-
o o

O 3
3 3

3 3

o o

— I .*

re 'a-
o o

3 3

o

O (VI

3 O

c c

ru K

o -H

o o
o o

3 O

O O
O O

O o

3 3
C -*

^t o

o

X

>
cr

2

C33333 3 COC C

ccooco c ceo o

^H-h»h.-i(\Jo03000000
03O3O0003OC00O

00333000 OOOOOO
00 3 30 3 03 r-3333©

OOOOOO oooooooo

3 So^OfOOOOOO

3 3 3 D 3 3 3 3 3 "3 3 3 3 O

— t r- r^ r- ~ rvj r"- 3 — > o O o f J ©

ir-=» cr^-^^-^irirififtriririTvD

3-^ OOOOOO CO OOOOOO

o

o
o

o

o

o

3

o

o
o

o

r-

3

o

LJ

c

<
in
i/i

*

>0

o
ir

c

z

<r

a.
u.

u

in
c

2

C

C

C
II

in

i
-3

3

o

i-

o

IT

in

c

o
u

IT

<v
II

y-

c

i

in
i

a.
i

a
ii

a.

— >
t- c

UJ 2
a uj

«-i cu <\i ft! cu Vi r r ir ir^ it hh N c o»<»-»> Wft'Nrr kk.i 1 r
*- -**-. »~»i »-;^ »-i •- »- •- «- w* w~ t- CV' c cor ccrccccft

vO r*

r ciioicm' K"i ft ^ ir r
re croc ceve oc

lf>

u
c

c

L

»"• r> f- or c c r> ' c c « t (; t ciC ©c>
o doooooo oooooo coo -3 o

CENFOR 12-22

February 1971

if

\

r-

c

•"'

»

jt

•

>.

a

a.

^_

u.

«i

u

»r

r> «.

•

« _j

en

•h a

cr

cr ?

I

r C <r

tru ia

c

t-

3

t-UCi

C

— ! — «

<_■

uu?

D

CV c-

! !

February 1971

GENFOR 12-23

hj
O

4

a.

a

s
<

to a:

o

3"

>o

*

*

M

l/l z.

o

r~

1^

f*1

*

m

U' c

c

cv

cv

K>

or c:

o

o

o

o

o

o

c c

o

o

o

o

o

o

c

o

o

o

c-

o

o

«3

j

u.

>

*-

f-

•3 Sr:

c

r^

J

»c

If.

If

r-

o

fV

- ^

_J

K)

•-4

C\l

OJ

r-

ifi

fO

^*

U <

c-

•■h

o.

IT

<:

ifi

r~

o

*-<

cr z:

c

O

o

•-

•-t

OJ

OJ

fl

1*1

»— (

o

c-

o

c

c

c

C

C

•

o

o

o

o

o

O

o

o

r
o

o
o

o
o

c

o 3 to © c- if) rr

r- -> — r- « —• r-

•-I <\' Ov <£ O «H IT.

1*1 f. r j» it o c t-<

O C O c -1 rt rt

O 3 O O O O O

r-

ti-
ll.

l/>

rr

I

o

c

,-

«■*

1 -

«-4

o

«H

*r

■H

*N

•-4

o

o

•-i

»<

, —i

«-H

c.

OJ

•-*

CM

OJ

OJ

3

»

ir

IT

! o

>C

ST

m

3-

fO

•*■.

tn

2

«-«

w-1

1 »—

•-<

c

C

c

c

C'

o a.

cc

rr

a

. <_>

o

Oj

c

a

CL

a

a

•- u.

u.

£

2

c

c

u

i

2

5

2

2

►- V

V

V

V

V

V

■v

•v

V

V

V

V

<

«p

*■

*p

»^

tp

V

<J _l

X

i/i

to

&

h-

►-

tf>

tf>

I

f-

m

c

O OL

a

D

h-

a

a

w-4

UJ

Hi

>

t-

«J

z

_j

<J

-J 7

>

<r

u

~

rr

c

V

or

K '

J

^

*—

c

U.'

_' «

<

C.

C

*-

+-

*~

>-

u

Q

L

U

C

a

K

«l CO

in

2

Z

*

z

tn

»-

J

L-'

Z

i'

o

Cl

2

o

u.

i

_J

U.

CENFOR 12-24

February 1971

«M

<
a.

r-

c

a

ip

a
o

«:

>-

li.

a c c a a a c cat ccc caQaccaacQco.
ccoooooooccoocccoocoococc r^ a t- o e

a. o 1 o cm

c o c a> o

' c c c c c c c cocccc CCCCC cc ccccc

<: a <: «a <; « <: ccdl-KKt-Kl-Kt-l-HCC'C <_;».>
2 S E S £ 2 Z SS-SESSSSSESSSSSSaS

i cr

i z c c c cc
I _r i I i — ^ — »

cc

in

a.

x x Zi tf* *p & & c i < <
a Dt-cr— tvrc ii-
-c.^cccc»- «^ r

< .
c a k

« C» 2

D E St
.<_>*_> O :* :* O <t Z

ci»- c z r c a _j

< <_' z « <-«ra«sa

J tfcECCCO-iCZ «C! ■= <_' Z « eetKH

ir. i/ii-u22Z22 Q.aoii.ujcocc<iQ:Q-acu.iijoocc<crac.cD«ta mc**2 o o a o o

a-
c

L

or
c
o

5

o

February 1971

CENFOR 12-25

o

a

!

a

s

Ifl

I I

in

>«.
o
o

O

5
O

o

c

V

c

IX
L.

l/>

a

c

in

v.
cr

<
u

#
#

13. THE TAPE SORT

March 1970 CENFOR 13-1

13.1. TTSTNO FORTRAN GENERATED SUBPROGRAMS AS OWN CODING TO THE 1107
SORT MERGE

13.1.1. CONCEPT OF "OWN CODING"

The 1107 Sort/Merge Is an independent program which, under
certain circumstances, may be instructed to "call upon"
subprograms to manipulate the data as it passes through
the S/M process. These subprograms (if present) are called
from the S/M at two points:

(1) OCFP - After an item is read from the input source
by the S/M, but before it is presented to the sort-
ing process, the "Own Coding First Pass" (if present)
is given control. This subprogram may then edit or
rearrange each item, change its length, reject it,
add items from another source, prepare tables, etc.

(2) OCLP - After the input and sorting process is complete
and while the sequenced items are being written onto

the final output, the "Own Coding Last Pass" (if present)
is given control before each item is written. This
subprogram may also edit or rearrange each item, change
its length, reject it, add items from another source,
prepare tables, etc.

Although the OCFP and OCLP subprograms both become part of
a single S/M program when they are loaded into the machine,
they should be thought of as two completely separate pro-
grams. They are executed at two separate points in time
and they may not communicate with each other except as
explained later. However, one tape is used for both assemblies,

An initial typeout indicating the FORTRAN own coding
name (the main program name is always SORT) and version
number is recommended since control is more difficult when
processing a program of this type.

"Own coding" may also be used with a special version
of SORT called S0RT4.C. This version handles IBM
Compatible Tapes in addition to all the units available
in SORT. See Part U-B-l SORT^C of the Census Computer
Systems Manual for parameter details and storage requirements.

CENFOR 13- 2 March 1970

13.1.2. CODING THE OCFP AND OCLP SUBPROGRAMS

/././.* FPCODE

@ MAP FPCODE, FPC0D1.

@LIP FOR FPCODE, FPCODE, FPC0D1

EXTERNAL FPSUB
1 CALL OCSUB (\$1,\$1, FPSUB)

SUBROUTINE FPSUB (\$,\$,\$)
COMMON NENTRY,ITMSIZ,ITEM(20)
IF (NENTRY) 100,200,300

(YOUR OCFP FORTRAN STATEMENTS ARE CODED HERE)

700

RETURN

1

800

RETURN

2

900

RETURN
END

3

))))))

3 blank

cards

/././•* LPCODE REWINT

@ MAP LPCODE, LPC0D1.

@LIP FOR LPCODE, LPCODE, LPC0D1

EXTERNAL LPSUB
1 CALL OCSUB (\$1,\$1, LPSUB)

SUBROUTINE LPSUB (\$,\$,\$)
COMMON NENTRY, ITMSIZ,ITEM( 20)
IF (NENTRY) 100,200,300

YOUR OCLP FORTRAN STATEMENTS ARE CODED HERE)

700

RETURN

1

800

RETURN

2

900

RETURN
END

3

))))))

3 blank

cards

Although the names in your actual coding need not be the same as
those in this example, they must maintain the same relationship
and consistency as shown in this example. Note that OCSUB is a
constant name. It is the name of a special subroutine. Also note
that NENTRY, I TMSIZ, and ITEM should occupy the first positions
in the blank COMMON block.

March 1970 CENFOR 13- 3

13.1.3. ENTRANCES TO YOUR OWN CODING FROM THE S/M .

Statement No.
Shown in the
Examples

EXPLANATION

100 This is the "write only return" from the S/M. This
means that you previously took the RETURN 2 entrance
to the S/M. The S/M is not presenting an item to the
Own Coding in this case.

200 This is the "end-of-file return" from the S/M. The
S/M has no more items to present to you. Execution
of the RETURN 1 statement will cause control to revert
to the S/M, not to reenter this particular Own Coding
subprogram again. Items may be added at this point
by use of the RETURN 2 statement \$ a limited number only.

300 This is the "read return" from the S/M. The S/M is
presenting the Own Coding with an item which is con-
tained in ITEM (1) to ITEM (n) while the length of
that item is contained in ITMSIZ. Note that, in the
coded example, ITEM was dimensioned with 20 locations.
This will, of course, vary according to the size of
the item expected. The "read return" from the S/M is
the first entrance used to enter your Own Coding
subprogram.

13.1.4. RETURNS FROM YOUR OWN CODING TO THE S/M .

RETURN 1 Your Own Coding elects not to present an item to
the S/M but requests that the S/M present the
Own Coding with another item.

RETURN 2 Your Own Coding has an item to present to the S/M
but requests that the S/M not present another item
to the Own Coding. Next entrance to your Own Coding
will be through the "write only return" (statement
number 100 in this example). The item that your Own
Coding is presenting to the S/M is contained in
Item (1) to ITEM (n), while the item length (n) is
contained in ITMSIZ.

RETURN 3 Your Own Coding has an item to present to the S/M and
requests that the S/M present another item to your
Own Coding. Next entrance to your Own Coding will be
through the "read return" (statement number 300 in
this example). The item that your Own Coding is pre-
senting to the S/M is contained in ITEM (l) to ITEM (n),
while the item length (n) is contained in ITMSIZ.

CENFOR 13- 4 March 1970

13.1.5. I/O STATEMENT WITHIN THE OWN CODING SUBPROGRAMS

FORTRAN read/write statements may not be used within the Own
Coding subprograms. At the present time, only FOLION and
EX I/O Statements are permissible.

13.1.6. COMMUNICATION BETWEEN OCFP AND OCLP SUBPROGRAMS

Although the OCFP and OCLP subprograms should be thought of as
two separate programs, all i/O devices are shared by them. Data
written on drum or tape by OCFP is available to the OCLP subpro-
gram. However, the FOLION package, if used, does not maintain
definitions of opened files in both subprograms. Therefore, all
files must be closed at the end of OCFP and then may be reopened
at the beginning of the OCLP subprogram. For example, OCFP could
write with FOLION on unit 10, and then close file with no rewind.
OCLP could then reopen the file on unit 10 and continue writing
on the same tape. Or, as an additional example, OCFP could write
on unit 10, close with rewind, and then OCLP could reopen and
read the file on unit 10. The same comments are applicable to
drum.

In addition, a single named COMMON area is available to both
OCFP and OCLP subprograms. Other than the blank COMMON statement
shown in the coded example, the following is the only COMMON
area which may be defined.

COMMON /OCTAB/

Data placed in the OCTAB COMMON area by the OCFP subprogram will
be available to the OCLP subprogram.

13.2. SCHEDULING
13.2.1. PTY CARD

The program name is SORT.

When there is no option coding, the user may elect to use SORTN.

March 1970

CENFOR 13- 5

13.2.2. FAC CARD
IBANK:

Let x = the larger
result of these two
computations

fOCFP IBANK - 700
[_0CLP IBANK - 1100

then, the total IBANK requirement
is : x + 614-4- cells

DBANK: Let x = the larger DBANK requirement of either the
OCFP or OCLP subprograms.

Then, the total DBANK requirement is:
X + COREWK + LOCTAB + LN\$BLN + 4096

where COREWK, LOCTAB, and LN\$BLN represent TAL card
increments explained later.

MD0/10000 Additional drum must be assigned to cover the sum
of LGTHWK, the length of OCFP (both banks), the
length of OCLP (both banks) and any drum used by
the Own Coding subprograms (represented by the
sum of the TAL card entries LD1 through LD5).
(LGTHWK represents a TAL card increment explained
later. )

MAI This designates a channel which contains three 2A

tape units. The unit tags are SMI and SM2 with SM1A
for the alternate I/O unit. (if the channel is not
used, it should not be mentioned on the FAC card.
Units contained on a channel which has been mentioned
must be deleted if they are not to be used). For
example, if we wished to schedule the 2A unit SMI,
the FAC card entry would appear as follows :

,MAl/l: SM2:SM1A,

the above comments apply to all tape channels.

MA2 This designates a channel which contains three 2A
tape units. The unit tags are SMA1 and SMA2 with
SMA1A for the alternate I/O unit.

MAS This designates a channel which contains the ten

standard FORTRAN 2A tape units. The unit tags are
AA through GA, READA, PRNTA, and PNCHA. These
are the units which are scheduled if the Own
Coding subprograms use 2A tapes directly.

MC9 This channel is used for 4C tapes AC, BC, PRNTC,
PNCHC, and READC. These units are scheduled when
FORTRAN Own Coding subprograms use 4C tapes directly
as in the EX subroutine. When the sort's input or
output is a 4C tape, then S0RT4C should be used.

CENFOR 13-6

March 1970

13.2.2. FAC CARD (Continued)

MT3 This designates a channel which contains eight 3A
tape units. The unit tags are SMT1 through SMT7
with SMT1A for the alternate I/O unit.

MT6 This designates a channel which contains seven 3A
tape units. The unit tags are SMTA1 through SMTA6
with SMTA1A for the alternate i/O unit.

MT7 This designates a channel which contains the ten
standard FORTRAN 3A tape units. The unit tags
are AT through GT, READT, PRNTT, and PNCHT. These
are the units which are scheduled if the Own Cod-
ing subprograms use 3A tapes directly.

13.2.3. TAL CARD
COREWK

This represents the number of data bank core locations
to be used for working storage by the sort.

LGTHWK This represents the number of drum locations to be
used for string storage by the sort.

LN\$BLN This entry is equal to the value which appears on
the ELF facility synopsis opposite "LN\$BLN." If
both OCFP and OCLP subprograms are present, the TAL
entry should be the larger of the values appearing
on the two ELF listings.

LOCTAB This represents the length of the OCTAB COMMON area,
if used. This entry is equal to the value which
appears on the ELF facility synopsis opposite
"LOCTAB." If both OCFP and OCLP subprograms are
present, the TAL entry should be the larger of the
values appearing on the two ELF listings.

LD1 These represent the Own Coding drum table lengths,
through if used. They correspond to FORTRAN internal unit
LD5 numbers 25 through 29.

March 1970 CENFOR 13-7

13. 2. U. SUB CARD

For OCFP only , the sub card should be :

JRID, SUB, 0CFP/FPC0D1, OCLP.

where FPC0D1 is the same as the second name on the MAP card of
the OCFP subprogram.

For OCLP only, the sub card should be:

JRID, SUB, OCFP, OCLP/LPCODl.

where LPC0D1 is the same as the second name on the MAP card of
the OCLP subprogram.

For OCFP and OCLP, the sub card should be:

JRID, SUB, 0CFP/FPC0D1, OCLP/lPCODI.

where FPC0D1 and LPC0D1 are as described above.

It is possible to use SORT with no option coding. In this case,
the SUB card should be:

JRID, SUB, OCFP, OCLP.

When SORTN is used, no SUB card is required.

CENFOR 13- 8

March 1970

13.2.5. PMO CARD

No. of
Column Characters

12

13

H

1

1

15 1

16 1

17 1

Parameter

Sort or Merge

Ascending or Descending
Sequence

Whether or not to use
machine sequence (00-77^)

Fixed or variable length
items

Rearrangement of keys

Type of key

Note: When column 13 indicates
descending sequence, use type
of keys under ascending to
produce descending sequence
and types 5-9 to produce
ascending sequence.

18 1

Must be blank

Coding

Blank = Sort

1 = Merge

2 = Merge/message (13-4)

Blank = Ascending
1 = Descending

Blank = Machine Sequence
1 = Different Sequence

Blank = Fixed
1 = Variable

Blank = Rearrangement

1 = No Rearrangement

Ascending:

Blank = Unsigned binary

1 = Signed decimal

2 = Unsigned binary

3 = Signed binary

(1107)
4- = Signed binary
(IBM)

Descending:

5 = Unsigned binary

7 = Signed decimal

8 = Signed binary

(1107)

9 = Signed binary

(IBM)

Ascending/Descending:

6 = Combination of

key types.

Blank

19

20

Location of input

Input file label

1 =

Uni servo IIA
(Census Compatible)

Uniservo IIIA
Drum

Blank = Check input tape
label against the
label specified on
the PM3, 4, and 5

1 = Do not check labels

March 1970

CENFOR 13-9

13.2.5. PMO CARD (Continued)

No. of
Column Characters

Parameter

21

22

23

24.-29
30-35
36-41
42-47
48-49
50-51

1 2/0utput file label

1

6
6
6
6

Type of intermediate
storage

Location of output

Maximum number of words
in item

Number of bits in total
key

Maximum number of words
per input block

Maximum number of words
per output block

Number of ways for merge
(for straight merge only)

Total number of i/O tape
units available excluding
alternate - at least two

Coding

Blank = Use contents of

PM6, 7, and 8 cards
as output label.
1 = Use input tape
label as output
tape label.

3 = Uniservo IIIA
6 = Drum

9 = Drum backed by
Uniservo IIIA

1 = Uniservo II A

(Census Compatible)

3 = Uniservo IIIA
6 = Drum

Decimal value

Decimal value

Decimal value *

Decimal value *

Decimal value

Decimal value

2/ When both input and output are in LION INTERNAL FORMAT free words (a maxi-
mum of 32), if present in the input tape label, will be transferred to
the output tape label.

* This decimal value is the block size written on tape. It does not
include the 35 words of file control information which FORTRAN
programers need when using F0LI0N.

CENFOR 13-10

March 1970

13.2.5. PMO CARD (Continued)

No.

of

Coli

omn
-53

Characters

52-

2

54

1

Parameter

55 1

56 1

57 1

Number of input tapes

Action required for

58

Own Coding First Pass

Own Coding Last Pass

Rerun

Input Tape Format

Coding

Decimal value

Blank = Type block number
and terminate

blocks

blocks but type
block numbers

Blank = No

1 = Yes

Blank = No
1 = Yes

Blank = No
1 = Yes

Blank = Internal
1 = External

59

Output Tape Format

60

1

PM3-^M5 convert FD to XS3

61-64

4

Sort file fixed length
item size

65-68

4

Final output fixed length
item size

71

72

73

Lang PM6/ J*=FD;l=Convt;2=XS3
equiv.

Language of input label

Total number of IIA
(Census Compatible) input
tapes to Sort on a one for
one basis

Blank = Internal
1 = External
1 = convert, Blank

Decimal value 3/

Decimal value 3/

Blank = Fieldata

1 = Fieldata to XS3

Blank = XS3

1 = Fieldata

Decimal value

do not

75

76-77

Whether or not to \$ort
every file of a multi-
file input

Blank = No
1 = Yes

Decimal value

2 File to begin sorting if
a multi-file input

3/ Parameter need not be entered if the item size is the same as specified
for the input file in columns 24-29.

March 1970 CENFOR 13-11

13.2.5. PMO CARD (Continued)

RELATIONSHIP BETWEEN CARD COLUMNS 2A-29. 6l-6A r AND 65-68 OF THE PM0 CARD
A = Columns 24.-29 Input Item Size
B = Columns 6I-64. Sort File Item Size
C = Columns 65-68 Final Output Item Size

CENFOR 13-12

March 1970

13.2.6. FM1 CARD

This card is to be used to arrange fields upon which the items
are to be sorted or merged. List major fields first, etc.,
down to the minor field.

Column

No. of
Characters

Parameter

Coding

12-14

3

Word in item where first
bit of field will be found*

Decimal value

15

1

Type of Key, if PM0 card
specified a combination of

See column 17 in
PM0 format

16-17

18-20

3

Key types

Bit position in word of
first bit in field

Number bits in the field

Decimal value

Decimal value

Repeat preceding four entries six more times if necessary.

PM2 CARD-

PM2 is used to establish the sequence if the machine sequence
is not desired. (Col. 11, of the PM0 card)

Beginning with column 12, 6h characters in the desired sequence
are punched.

The first word in an item is word 1.

March 1970

CENFOR 13-13

13.2.7. PM3,PM^,PM5 CARDS

These cards are used to check the Input File label if this
option has been selected in the PM0 CARD.

No. of
Column Characters

12-17

18-23

6

Parameter
Number of words in the File
Label, including the date and
reel number (maximum value is
32)

Date (Month, Day, Year)*

Coding
Decimal value,
with either
or blanks

Numeric, e.g. ,

052064,

if blank, date is

not checked.

2^-29

Reel Numbers-

Decimal value.
If blank, the
reel number is not
checked.

30-77 6-180

12-77 (PM4 or
PM5 Card)

File Label. It can be
continued on PM4- and PM5,
beginning with column 12

Alphanumeric

"If a HA tape is read, there will be no date and reel number to
be checked, so columns 18-29 should be blank.

For External Format, the PM3 card should contain:

Columns
12-17
18-23
24-35

Word Count
Reel Number
File Name

Always 3 in column 17
Decimal value
Alpnanumeric, space filled

CENFOR 13-14

March 1970

13.2.8. PM6,PM7,PM8 CARDS

These cards are used to supply the Output File Label, if this
option has been selected in PM0.

No. of
Column Characters

Parameter

Coding

12-17

18-23

Number of words in the File
Label, including the Date and
Reel Number (maximum value
is 32)

Date (Month, Day, Year) *

Decimal value with
zeros or blanks

Number, e.g.,

052064-

If blank, the run

date, provided by

EXEC 1 will be

written.

24-29

Reel Number*

Decimal value.
If blank, the
first reel of the
output will be
set to 1.

30-77 6-180 File Label. It can be

continued on PM7 and PM8,
beginning with column 12.

Alphanumeric,

" x "If a IIA tape is written, no date and reel number will be written,

so columns 18-29 should contain the first two words of the file
label.

For External Format, the PM3 card should contain:

Columns
12-17
18-23
24-35

Word Count

Reel Number
File Name

Always 3 in column 17
Decimal value
Alphanumeric, space filled

March 1970 CENF0R

13.2.9. EXAMPLE OF SORT SCHEDULE CARDS

Description of problem:

25,000 120 word items.

Input is 3 IIIA's with 605 word blocks.

Output is to be on IIIA with 605 word blocks.

Sort keys are word 120, bits 5-0; word 97, bits 29-0;
word 3, bits 35-0; word U, bits 35-0; word 5, bits 35-0.

No input label checking.

Output label is supplied in XS3.

User's own coding for both first and last pass.

One IIIA tape is used in option coding.

The own coding first pass uses:

IBANK - 300

DBANK - 100
The own coding last pass uses:

IBANK - 6000

DBANK - 2000

CENFOR 13-16

1970

March 1970

>

I
at

Z
O

>

s

o

z

*/>
VI
III

y
o
<r

a.

V
V

c
o

■&

V
V

V

u

o

ui

D

a

V

"o

V

E
P

w

V

a

V

"o
IJ

«

a

c

u

s

Q

u

LU
X
UJ

1

c

D

a
c

0)

3
E

c

s

u

T>

-C

C
Q
V

-O

1
u

D

-C

o

<h

■c

£

O

u

TS

c

g

E

"5

U.

c
E
3
~0

t>

i
6

li

c

0>
II

c
o
Q

eo
r-.

•

00

r^

<N

r^

o
^o

o
<o

s

<N

S

o
m

*

•

CD
<N

•o
•c

o

a

<N

o

«D
<>*

•

eo

R

o

«N

■*

S

s

<o

•

•

CO

r-

CN

f*.

•o

'O

o

■«

s

o

<*4

ao

IN

■o

•

R

r-.

>o

in
r-

n-

f»s

en

IN

o

CK

-O

III

in

Z

a

a

u

u

o

J

o

<
u.

1-
Z
bJ
X
Ul
IE
U

z
I

z

bJ

_l

Ul

-1

a

<

o

IT

bJ

u.

Z
<

a

ul

X

<
z

0.

-1
o
o

«

0.
u.
u
o

P-.
o

Pu,

o
o

rH

P-,
O

Ph

Ol

IN

rs.

o
■o

■a
r»

a

CN

•0

<N

a

bJ

(-

bJ

R

g

■A

r>.

2
Z
ft

•4

r»

ri

Pi

W

r-t

rZ

Wl

:

-

■o

f>

Hi

i-

r>

•o

o
E

E

<u

M

o

tt

b

<0

S7

•

t

*n
in

i-

W\

NOTE : Do not use this form for programs
requirinf more than one set of parameter
cards. Use forms BC-l522b and BC-1522c

H

■o

■e

•
E

•

3

a
•

as

«

s :?

? 6

or.

xD

^

•

5

o
•*>

XI K

P-

o

ft

CD

*

>

a

s

"

St

r-{

4

rH

s

a

a

-

o

a

IN

id

a.

Eh

CI

»n

-

IS

vO

tx3

5

o
g

o

*

-X
J

IN

to

r>

r*,

_s

u

z
<
z

X

a

u

X

o

P-,

S

O

•z.

•al

5

KM K-1S22* TCCT U. S. DEPARTMENT OF COMMERCE
6-«7i 1 L J I BUREAU OF THE CENSUS

1107 EXECUTIVE SCHEDULE CARDS
FIXED PARAMETERS ONLY

«

S

c

u

«
o

<>IS

J

V

?"

V

a

g

«

M

C
3
Jf
O

i

u

i

"O

o

d

U-N

Oh

E-"

5

rH

"

u-\

!!

OO

Ei

O

Eh

f

f>

H

M3

D

•A

r>

■z.

Pu

s

oc;

Eh

o

Pm

P

a

in

O

?

«

2:

F-i

O

w

-

O

sO

S5

ft.

EH

r>

<

<
<

a.

to

<

s

w

E->

W

o

<S

X

oi

rH

CO

s

S

CO

^f

VT\

M

*->

*

..

H

-<f

rr\

«

<*>

-

<:

a

r>
S

a:

E-h

o

K-l

rH
rH

u-\

rH

M

w
«

Ol

rH

CO

in

IN

m

can

6-i

rH

• •

C«1

l-H

a

n

.

(->

H

»

s

o

NU

X

1X4

tH

B

o

IN

-

CO

••

O

o

ft

V
IN

-Ci

«n
_a

<N

In

"5

al

X

<

EH

CM

rr\

«

v£)

w

rH

o

X

u

(U

c

o

o «

" O

\$

Cl
D
«

C

*9

i;

o *

•* &

•*- CTi
O 3

ti
it

IL

••

O

?4

r^i

E-h

rv

•A

IN

H

Q

IN

■
<

E

O

tt.

a.

S

..

r^>

t>

Sl

«

EH

O

O

"S.

a

IS,

»o

o

«.

IN

is

Eh

..

rH

^£>

ISl

s

IS

K

m

E-i

(Tx

■s.

*

is.

Ol

M

aa

<»\

•

OA

01

-

..

u^

v£)

r^

r%

d

-«

•

Q

rl

00

<e

a?

*«

H

Ns.

a

ISl

■*

•

\

r-

•

■

O

is.

»

ISl

u
u

m

E-"

O

a

CN

f»1

M

2 1

Q.Z
to

o

s:

r-{

in

fM

z

-

-

-

.

.

.

-

.

5

o

CO

u

a

>

>-

UI

a

>

u

<
u.

u

<

b.

bJ

a

>
►-

<

>
►-

z
tt

I
tt

Ul

a.

>-
»-

■

u
a

o
X

1

X

a

X

a.

X

a

X
0.

X
a.

X

X

a

X

a

X

a.

X

a

o

•0

&\

r-s.

-

'

.

.

--

-

r*

c
o

- •

<

<N

o
K

o

z

o

tt

a

■O

'

*rt

c

r _

^

'■

r>

04

•

-

March 1970 CENFOR 13-17

13.3. DETERMINATION OF CORE, DRUM, AND TAPE REQUIREMENTS FOR A SORT

Core working storage (COREWK), drum tables for storage of sorted
strings (LGTHWK) and intermediate tapes must be assigned in the
proper relationship to complete a sort operation in one merge pass,
Excessive running time and a high incidence of error terminations
will result if this is not done.

A simple formula will produce the most strategic assignment for
LGTHWK and intermediate tapes. Then, COREWK may be determined by
dividing LGTHWK by 50.

The formula for LGTHWK is:

LGTHWK = 1
T

D A+lN + 15,000

where

D = total number of data words

I = number of words per item

T = number of intermediate tapes, initially assigned as 1.

COREWK = LGTHWK (must be at least 20/+S words)
50

If the total number of data words exceeds 4,000,000 the sort should be
done in parts, followed by a merge. A maximum of 4,500,000 data words
can be sorted in one operation within the standards for facility
assignment providing the record size is not less than 15 words and
there is no option coding. The minimum configuration of intermediate
tapes, if any are used, is 3. If the output tape is a ill A tape, then
trie output tape can be considered one of the intermediate tapes.

CENFOR 13-18 March 1970

13.3. DETERMINATION OF CORE. DRUM, AND TAPE REQUIREMENTS FOR A SORT (Cont.)

There is no positive optimum for facility assignment using the
formula but an effective rule is: If LGTHWK is greater than 600,000,
with T = 1, recompute with T = 3« Increase T to the maximum of 5,
if necessary, until LGTHWK is less than or equal to 600,000. If
LGTHWK is 600,000 or less with T = 1, no intermediate tape units
should be assigned. The sort can be accomplished in core and drum
with one merge pass.

EXAMPLE 1 ;

Assume 100,000 20-word items are to be sorted.

D = 2,000,000
I = 20

With T = 1, LGTHWK = 2 ,J*50# ,jd0jtfQi J+ 15,000 = 2,115,000

Result exceeds standards as well as the effective rule.
With T = 2, LGTHWK = 2,000,000(g) + ^^ = 1}057>500

2
This result also exceeds standards and the effective rule.

With T = Ki LGTHWK = 2, \$00, 000 Q\$) + 15,000 = 528,750

5

This is an acceptable result, therefore

LGTHWK - 528,750
Intermediate Tapes = U

COREWK = 528,750 = 10,575 or 6 additional DBANK.
50 -

EXAMPLE 2 :

Assume 50,000 10-word items to be sorted.

D = 500,000

I = 10

With T = 1, LGTHWK = 500,000 (^*) + 15,000 = 565,000

LGTHWK is less than 600,000 with T = 1, therefore no inter-
mediate tapes are required.

COREWK = 565,0j^0 = 11,300 or 6 additional DBANK.
5P

March 1970 CENF0R 13 _ 19

13.4. INFORMATION RELATIVE TO THE STRAIGHT MERGE ONLY

A. Alternation if requested by the FAC card refers to the output.

B. It is not necessary to increment the drum table length tag,
LGTHWK.

C. COREWK must be incremented to allow for double buffers for each
input file.

1. It should equal 2F-, , + 2F~, ...... + 2F„

F., = largest block on file 1
Fp = largest block on file 2
F = largest block on last file

D. Option coding, if used, can only be last pass.

E. When column 12 of the PM0 card is coded "2", a message "REQ
NUMBER OF WAYS TO MERGE" is typed out awaiting a reply of one
digit. The number of ways to merge (columns 4.8-49 of the PM0
card) is reduced to the number typed in which may range from

1 to the maximum number requested in the ?M0 card. This feature
removes the necessity of preparing numerous sets of schedule
cards to merge n files of sorted data. The FAC and TAL cards
should reflect the maximum facilities required. When a "one-
way" merge is specified, input and output equipment types must
be the same.

CENFOR 13-20

March 1970

13.5. SIGNIFICANT CONSOLE MESSAGES
Type out

A. NN JRID CH C/U LABEL ERROR

IMAGE rr mmddyy (30 chars.

of label)
LABEL rr mmddyy (30 chars.

of label)

Where NN = message number
rr = reel number
mmddyy = data

B. .CCS. XXXXXXXXXXXX
•TCS.XXXXXXXXXXXX
Ccc Uuu

LION ERR 23

C. SORT ERR 21
Ccc Uuu

D. CHECKSUM ERROR

XXXXXXXXXXXX INPUT CHECKSUM
XXXXXXXXXXXX OUTPUT CHECKSUM

B.

E. NN JRID .CCS. XXXXXXXXXXXX. RC.XXXXX E.
. T CS . XXXXXXXXXXXX . RC . XXXXXX

NN = Message Identifier

F. NN JRID .CCS. XXXXXX. RC.XXXXX
. T C S . XXXXXX . RC . XXXXX

NN = Message Identifier

Y - Accept label

N - The routine assumes that

another tape has been placed
on the unit and the label
check is reinitiated.

A block checksum failure
occurred and the tape in error
is identified by channel and
and unit.

Sequence error on final out-
put. The input tape in error
is identified by channel and
unit.

This is an internal checksum
failure. The sum of the data
bits at the end of the first
pass does not equal the sum of
the data bits at the end of the
last pass.

File checksum error on a IIIA
tape (LION INTERNAL FORMAT).

Y - Accept

N - LION ERR 116

File checksum error on a IIA
tape (Census Compatible Format),

Y - Accept

N - LION ERR 109

March 1970 CENFOR 13-21

13.6. NOTES ON SORT/MERGE

13.6.1. VARIABLE LENGTH ITEMS

It is possible to sort variable length items. The type of
intermediate storage ma y be Uniservo IIIA jr drum backed by IIIA's.

13.6.2. OUTPUT FILE LABEL

When both input and output are in LION INTERNAL FORMAT, free
words (a maximum of 32), if present in the input tape label
will be transferred to the output tape label.

13.6.3. SORT FILE FIXED LENGTH ITEM SIZE

By making an entry in columns 61 -64 of the PM0 card, an item
size different from the one specified in columns 24-29 can
be sorted. If there is no first pass option coding and the
new item size is smaller than the input record size, this
change is automatic. When there is option coding or when
the new record size is larger than the input record size,
this change must be effected by first pass own coding setting
the new item size into "ITMSIZ" before returning control to
the SORT/MERGE. The automatic feature is not available for
variable sized items. When columns 61-64 are coded to change
the item size, columns 65-68 should be completed to specify
the output record size.

13.6.4 FINAL OUTPUT FIXED LENGTH ITEM SIZE

By making an entry in columns 65-68 of the PM0 card an item
size different from the one specified in columns 24-29 can be
written on the final output tape. When the record size created
is larger than the Sorted record, the record will be junk filled
unless last pass option coding inserts data to complete the record.

13.6.5. INPUT/OUTPUT-IIA CENSUS COMPATIBLE FORMAT

When both input and output are HA Census Compatible format,
up to 9 tapes may be sorted on a one-for-one basis without
rescheduling the SORT/MERGE program.

13.6.6. MULTI-FILE INPUT

It is possible to use a multi-file tape as input to the SORT/MERGE
and have the following options: l) Decimally specify the first or
only file to sort; 2) Sort every file or only one file after
reaching the starting point. The first tape mounted must contain
the label block of the file to commence the sorting operation.
The output is a single file . Card columns 52-53 of the PM0 card
are a count of the total number of physical input tapes involved.

13.6.7. FILLING OUT REQUEST SHEETS

When filling out the "REQUEST FOR 1107 PROGRAM PREPARATION
SERVICES," you must indicate in the space labeled "ASSEMBLE"

that a FORELF/ELF compiling sequence is desired.

CENFOR 13-22 March 1970

13.6.8. ALLOCATION OF OPTION CODING

A special debugging aid is now available in the SORT. A word,
located in octal location 34 of the IBANK of the SORT, contains
the address of first pass coding in the left half and the address
of last pass coding in the right half. If a sort terminates
abnormally, last pass coding is not available during first pass,
and first pass coding is not available during last pass. The
option coding segments are stored on the drum and are brought
into core at appropriate times.

* U. S. GOVERNMENT PRINTING OFFICE : 1971 131-996/1421

H. SERVICE PROGRAMS

March 1970 CENFOR 14- 1

SUMMARY OF SERVICE PROGRAMS

For further information on the following, refer to the Computer
Systems Manual.

L.l. CENSER

Included in CENSER are the following options :

1) CT for card-to-tape in LION External Format *

2) CT for card-to-tape in LION Internal Format*

3) CD for card-to-drum in LION External Format*

4) TP for tape-to-print in LION External Format

5) IP for tape- to-print XS3 in LION Internal Format

6) IPF for Tape-to-print Fieldata in LION Internal Format

7) DP for drum-to-print in LION External Format

8) BP for bi-octal tape to print

9) BaLnxc for on-line printing of a IIA tape where a=board,
n=loop, x=language (F for Fieldata, X for XS3), and
c=spacing (l for single, 2 for double)

*For all card operations a START card must be provided in addition
to a STOP card with "))))))" in the first 6 columns followed by
3 blank cards.

The general form of the START card is:

Col.
1-6

Col.
7

Col.
13-36

Col.
37-42

Col.
43-48

Col.
73-78

/././•

f

DECK
NAME

TRN
JRID

TRN
PARAM

REWIND

where "TRN PARAM" contains a transfer parameter to be used with the
job transfer described above. It may be left blank, if no transfer
is desired.

CENFOR 14- 2 March 1970

14.1. CENSER (Continued)

Transfers :

The transfer columns may be used to transfer a CENSER produced
tape (or drum area) back to CENSER to perform another function.
For instance, the START card in a card-to-tape operation may
contain the JRID of "CENSER" in column 37-4-2 and the parameter "TP"
in column 43-44. This will cause CENSER to print the card-to-tape
reel upon completion of the card-to-tape operation with no operator
intervention.

Differences in the START card for the three card operations:

CT (LION External Format):

Column 7 - should contain an asterisk "*"

Columns 13-24 - should contain the card file name, which
becomes the tape file name.

CT (LION Internal Format):

Column 7 - should contain one of the following:

Z - fill with XS3 zeros, data is XS3

S - fill with XS3 spaces, data is XS3

I - fill with ignores, data is XS3

F - data is Fieldata, fill with spaces, fixed 20-word
record, last 40 characters space fill.

Columns 13-36 - a four-word file name which becomes the tape
label.

CD (LION External Drum Format):

Column 7 - should contain an asterisk "*"

Columns 13-24 - should contain the card file name, which
becomes the drum file name.

Columns 37-42 - MUST contain JRID of transfer

Columns 43-48 - MUST contain PARAM for transfer

Further information may be found in the Census Computer Manual
Part 12D-SV012.

March 1970 CENFOR M- 3

I4..2. CKSUM

This program reads a IIIA LION Internal Format tape, types
out the label, the total number of items in the file, and the
block count.

The programer must furnish the number of tapes and the largest
block size if it exceeds 605 words. See GSM 12D-S\00.

14.3. SELTPR

This program searches a IIA or a IIIA tape for a predetermined
block. When found, the remainder of the tape is printed or the
target block is read and printed in bi-octal format until action
is terminated by the programer.

The programer must supply the number of words to search for
in every block and the contents of each word. He must also
furnish information as to when to set the jump switch which
terminates the run. He must also specify sequential or repeti-
tive printing and the number of reels to be searched. All
information will be typed In at the console. See CSM 12D-SV01.

14-4- AUTOCP

This program compares two tapes recorded in the same format.
The differences are printed with block and word number indi-
cated.

The programer must indicate options which will be typed in at
the console :

TYPEIN
1st character - type of comparison

2nd and 3rd characters - output mode PT
4-th character - input recording

5th character - input language

If the largest block on tape exceeds 605 words, this difference
must be noted. A TAL card must be used to increment the length
tag LEN. See CSM 12D-SV02.

IIIA to IIIA

1

IIIA to IIA

2

IIA to IIA

PT

paper tape

MT

magnetic tape

variable

1

IIA fixed (IIA tape

only)

X

XS3

binary

CENFOR 14- 4 March 1970

14.5. BTP

This program prints a limited number of blocks from a tape on
the on-line printer. The format is bi-octal. Input may be
either IIA or IIIA.

The programer must furnish the number of blocks to be printed.
( Printing should not exceed 5000 lines.) CENSER BP will
also achieve the same result. See CSM 12D-SV03.

14.6. TCOPY

This routine is used to duplicate a tape recorded in any format,
fixed or variable block mode. All combinations of TIA and IIIA
servos are possible. This is not recommended for IIA tapes.

The programer must indicate what types of tapes are to be used
(e.g. IIIA to IIIA, etc.). See CSM 12D-SV04.

14.7. CTSIM

The input to this routine is a IIA tape prepared on the 14-01 by
a card-to-tape conversion. 2 sentinels must be added to the card
decks as follows: 6 beginning and 12 ending sentinel cards.
Space or ignore fill should be used in the conversion. This routine
is used when the card reader cannot be used on line for any reason.
The output from this routine is in LION External Format and the
BCX XS-3 characters are converted to Fieldata. See CSM 12D-SV06.

14.8. EDTCPY

The purpose of this routine is to convert and copy IIIA tapes,
recorded in LION External Format, to IIA tapes. Data is con-
verted from Fieldata to XS-3 and prepared for the off-line HSP.

If the programer desires to drop words other than words 20 and
21, a PM0 card must be supplied specifying the exact characters
to be dropped, separating digits by commas. Characters are
numbered 1-132. Up to 12 digits may be specified.

After the last digit is supplied a period must be used on the
PM0 card.

Output of EDTCPY should be printed on the off-line HSP, using

Board 3, Loop 4, single space. Begin printing on Line 2. (CSM 12D-SV08)

14.9. CARTAP

This program reads cards on-line and prepares a IIIA LION Internal
Format tape in XS-3 language using a small deck of cards. It is
useful for preparing test decks. Refer to CSM 12D-SV09.

March 1970 CENFOR 14- 5

U.9. CARTAP (Continued)

The programer must supply record lengths and number of data
characters per card for the record size. The first card must
be a label card as defined:

Column

Contents

AAA

Actual

Record Length

1-6

7-8

06

6

08

8

10

10

12

12

15

15

20

20

24

24

30

30

40

40

60

60

70

120

Column

9-10

Contents

No.

Characters

Words/Record

36 (2

records

36

6

per

card)

72

72

6

48

48

8

60

60

10

72

72

12

90

90

15

30

30

15

70

120

20

60

60

20

72

72

24

36

36

24

60

60

30

CENFOR 14- 6

March 1970

14.9. CARTAP (Continued)
Column

11

12

Contents

No. Characters

Words/Record

30

30

30

70

120

40

60

60

40

70

120

60

60

60

60

70

120

120

60

t

1

R

60

120

fill character ignore
fill character XS3 zero
fill character space
Rewind tape
No Rewind

Example of card which reads two cards, 60 characters from each to
create a 20-word record:

/././• 2060 #R

Example of card which reads 1 card of 80 characters to create
a 20-word record with ignore fill.

/././. 2070 #R

14.10. DATACO

This program will perform one or more of the following services
upon a IIIA tape recorded in LION Internal Format:

a) correct or delete existing items in a file

b) insert new items

c) search for selected items and copy; list the target item.

d) drop files from a multi-file tape

e) change the internal file label

The programer must furnish a number of parameter cards. Details
are too extensive to be mentioned here. Refer to the Computer
Systems Manual Part 12D-SV010 for details.

i

March 1970 CENFOR 1/,- 7

U. 11. COPIER

The purpose of this routine is to copy IIA or IIIA LION Internal
Format tapes with or without conversion from XS3 to Fieldata or
Fieldata to XS3. Options are entire item conversion, partial
item conversion, or no conversion. Items must be fixed length.
This routine is much faster than RUTT.
Refer to the Computer Systems Manual Part 12D-SV011 for details.

H.12. RUTT

The RUTT program will read a IIIA LION Internal Tape and either
check read or copy the tape to a IIA tape(s) in Census compatible
format for off-line printing.

OPTIONS AVAILABLE ARE : OPTION

14.. 12.1. To check read a tape securing check sum and CH
record count typeouts.

14.12.2. To copy fixed record tape(s). IS

14.12.3. To copy variable sized records. VS

14-. 12. 4-. To split each item into a number of IS or VS plus

output items (the resulting size of PMO card

each item must be a factor of 120).

A specification sheet "VARIABLE
PARAMETERS- PART 2" must contain the
parameters required. Columns 20-22 of
PM0 should contain 3 digits representing
the number of items in the split.
Column 23 should contain a period.

Example : 030.

RESTRICTIONS :

a) When the input item size is divided by
the splitting factor and a remainder
occurs, then the input item size is
truncated by the remainder.

b) When the input item size is divided by
the splitting factor and the quotient is
not a factor of 120, then the RUTT will
terminate .

c) All 3 digits to represent the number of
items must be present if used in the split
option. Use to fill.

d) When the input block size for any option is
greater than 1205, the table length tag
"SIZA" must be increased in a TAL card. If the
increment exceeds 2CO words, the DBANK of the- FAC
card must be increased to two modules.

CENFOR 14- 8 March 1970

(Continued) OPTIONS AVAILABLE ARE : OPTION

14.12.5. To copy n number of blocks at the beginning RUTT100
of each tape. If the standard 100 blocks for

testing is needed specify RUTT100.

If the number of blocks is not 100, then a IS
specification sheet "Variable Parameters plus PM0
Part 2" must contain the parameters required. card
Columns 12-15 of PM0 should contain a four-digit
block limit followed by a period in column 16.
If the period is not in column 16, then the
entire tape will be transcribed.

Example : 0010.

14. 12. 6. To bypass a number of blocks at the IS
beginning of each tape and to copy PM0 CARD
the remainder, a specification sheet

"Variable Parameters-Part 2" must
contain the parameters required.
Columns 12-15 of PM0 should contain
the four-digit number of data blocks
to be bypassed. Column 16 should
contain a period. Column 17 should
contain a minus .

Example : 0010.-

14.12.7. If it is desired to combine all the
data into one output file, then the
options containing "S" may be changed
to "H", which means hold the output with
no rewind. The "S" option will create
a tape for each segment or file.

Note: The information described should be
included under "REMARKS" on both the
"Request for Services" and the
"Operating Instructions" submitted by
the programer. If a specification
sheet "Variable Parameter-Part 2"
is required, it must be submitted
with the request.

March 1970

CENFOR 14- 9

14.13. UTT

The UTT program will read a II tape(s) in Census compatible
format and either check read or copy the tape to a IIIA LION
Internal Tape.

OPTIONS AVAILABLE ARE:

OPTION

14.13.1. To check read a tape securing
check sum and record count
type outs.

14.13.2. To copy fixed records of a certain
size, supply the number of words per
record as three digits.

The "F" means the output tape is
rewound after this transcription.
The "S" means the output file is
closed after this transcription but
the tape is not rewound. Thus many
files may be placed on a tape(s).
The "H" means the output file is
still open after this transcription
and the tape is not rewound. Thus
many tapes may be combined into one
file.

CH

nnn F
nnn S

nnn H

nnn F

nnn S

nnn H
plus PMO Card and
TAL Card if required

14.13.3. To combine two or more input records
of a certain size nnn into a larger
output item, a specification sheet
"Variable Parameter-Part 2" must
contain the following information.
Columns 20-22 of PM0 should contain
3 digits representing the number of
items to be combined Into one output
item. Column 23 must contain a period .
If the combined output item size is
greater than 600 words, the table length
tag "SIZA" must be increased accordingly.

EXAMPLE: If thirty 40-word input items are to be combined as
one output item, specify 040S option with PM0 columns 20-23
containing 030. and TAL card containing SIZA/600.

See option 2 for the meanings of F,S, and H.

Restrictions :

a) The input Items must be adjacent.

b) Unless the total number of input items is a multiple
of the specified combination factor, there will be a
loss of items at the end of the file.

c) All 3 digits representing size of item or number of
items must be present wherever used. Use to fill.

CENFOR 14-10 March 1970

14.13.3. Restrictions (Continued)

See option 2 for the meanings of F,S, and H .

Note: All necessary information should be included on both
the "REQUEST FOR SERVICES" and "OPERATING INSTRUCTIONS." If
any specification sheets are needed, they should be supplied
with the request.

14.14. RUT702

The purpose of this program is to transcribe data from compatible
tapes created by the IBM 1013/7702 transmission system, or on
occasion by the UNIVAC 1004, to Uniservo IIA or IIIA tape units.

See the Computer System Manual Part 12D-SV013 for details.

14.15. UTT4C

This routine will transcribe data from either IIA or IIIA tapes
onto IBM compatible tapes.

See the Computer System Manual Part 12D-SV014 for details.

14.16. MICRO

This program transcribes data recorded on a IIA or IIIA tape
in BCD language at 556 c.p.i. density in the S/C 4411 Computer
Printer tape format. In the next operation each IVC block will
be recorded as a frame on microfilm.

See the Computer System Manual Part 12D-SV015 for details.

14.17. RUTA19

This routine accepts IIIA tapes recorded in LION Internal Format
and reformats the data (with selective conversion) into 20-word
lines on IIA tapes for display on the off-line printer. Each
original word is displayed as two words, and each new record
begins a new line.

Options available are :

a) no PM card - entire item conversion from binary to BCD-XS3

b) blank PM0 card - no conversion

c) PM0 card with selected punches beginning column 12 for

word 1, column 13 for word 2, etc. on a
one-for-one relationship —

1 means binary to XS3 conversion of a word

means octal to XS3 conversion

\$ means no conversion

March 1970 CENFOR 14-11

14.17. RUTA19 (Continued)

Columns 12 - 77 of the PMO card represent words
- 65 of the item. Columns 12 - 77 of the PM1
card represent words 66 - 131, etc.

If PM cards are needed, supply the Information on the specification
sheet "VARIABLE PARAMETERS - PART 2." See CSM 12D-SV016.

14.18. SALVAG

This program copies HA (Census Compatible) or IIIA LION
Internal Format tapes and skips blocks that cannot be read.
The programer should supply a record size for HA tapes and
the block size for IIIA tapes.

See Computer Systems Manual Part 12D SV017 for further details.

14.19. 2 TO 3

This program will copy one or more HA tapes in Census Compatible
Format to a IIIA LION Internal Format tape.

See Computer Systems Manual Part 12D SV018 for more details.

14.20. 4C TO 4C

This program will copy a 4C tape to another 4C tape allowing a
change of density.

See Computer Systems Manual Part 12D SV020 for further details.

14.21. TP4C

This program will print a 4C tape on the on-line high-speed
printer (restricted to 5000 lines).

See Computer Systems Manual Part 12D-SV022 for further details.

14.22. SUTT1

This is a special version of the RUTTl service routine that
transcribes IIIA tapes in LION Internal Format to other IIIA
tapes in the same format. It allows the creation of multi
files; it allows the bypassing of files or blocks; it allows the
copy of a specified number of blocks, it allows for the creation
of one file from several, etc.

See Computer Systems Manual Part 12D-SV023 for specific details.

CENFOR 14-12 March 1970

14.23. PSTRIP (PROGRAM SYMBOLIC TAPE STRIPPER)

This is a routine designed to allow the processing of a card
deck for assembly which contains control statements not
normally found in a program deck. These control statements
enable you to retrieve lines of coding from previously assembled
program elements, placing them into your program as desired.

See Part 12D SV019 of the Computer Systems Manual for details.

14.24. FOIST

This is a service program which renumbers FORTRAN source
coding statements in an orderly and logical sequence in
increments of 10 up to a maximum of 500 statement numbers
per program element.

See Part 12 SV021 of the Computer Systems Manual for details.

14.25. SR2F0L

This is a general stepwise regression program.

See Part 14F of the Computer Systems Manual for a complete
description.

14.26. MDMIC

This routine is a modified version of MICRO with no provision
for user's own coding. See 12D-SV025 of the CSM.

14.27. RUTMDS

This routine transcribes IIA or IIIA tapes to a IVC tape in

a format suitable for printing on the MOHAWK MDS7160. Original

data must be in BCDXS3 language. See 12D-SV026 of CSM.

14.28. IMAGER-TWOPAS SYSTEM

This system of programs produces formatted tables suitable
for off-line double pass printing. Provision is made for 132
lines a page, 185 characters per line, and 30 pages each of
left and right pass printing. See 14D of the CSM.

March 1970 CENFOR 14-13

14.26. EXERCISES

14.26.1. Whenever the need arises to convert a IIIA tape to a IIA
tape, what service routine is available for our use?

14.26.2. The service routine RUTA19 is used for what purpose?

14.26.3. CENSER is the name of the Census Service System we use for
on-line card-to-tape, tape-to-print, etc., functions.
Which option is used for bi-octal printing?

14.26.4. What is the purpose of the service program PSTRIP?

CENFOR 14-14 March 1970

14.26.1. RUTT for off-line printing, or the faster routine COPIER.
COPIER may be used depending upon the ultimate need.

14.26.2. To prepare a data tape for display printing with or without
conversion of selected fields, for octal, 1 for binary to
excess - 3, or nothing for no conversion.

14.26.3. BP

14.26.4. To combine pieces of programs to create a new program.

15. DECISION TABLES

March 1970

CENFOR 15-1

DECISION TABLES

A decision logic table is a table of all contingencies that are
to be considered in the description of a problem, together with
the actions to be taken. Decision tables are sometimes used in
place of flowcharts for problem description and documentation.

Decision tables demand that all combinations or conditions be
considered and allow irrelevant tests to be omitted. Once a
program has been documented in decision table form, it is easy
to update the documentation whenever changes in the program are
required, because an individual table in the program can easily
be changed.

15.1. LIMITED-ENTRY DECISION TABLES

In limited-entry form a decision table has four major sections
as shown in the following diagram:

CONDITION
STUB

CONDITION
ENTRY

ACTION
STUB

ACTION
ENTRY

The condition stub in the upper left quadrant should contain
(in question form) all those conditions being examined for a
particular problem segment (for this table).

The action stub in the lower left quadrant should contain, in
simple narrative form, all possible actions resulting from the
conditions listed above.

The condition entry section in the upper right quadrant contains
Responses may be "Y" for yes and "N" for no. If no response is
indicated it may be assumed that the condition was not tested in
that particular combination.

CENFOR 15- 2

March 1970

15.1. LIMITED-ENTRY DECISION TABLES (Continued)

The action entry is in the lower right quadrant. The appropriate
action resulting from the various combinations of responses to
condition will be indicated here by an entry "X" which means to
"take this action." A blank means "do not take the action shown."

The various combinations of responses to conditions shown in the
condition entry portion of the table and their resulting actions
are called rules or paths. Each column encompasses a rule. Each
is given a number for identification purposes in the rule header
portion of the table.

One other element each table requires is the table header or
name to identify the table. A collection of tables may comprise
the program.

The following outline shows all basic elements:

1

2

3

U

CONDITIONS

ACTIONS

EXAMPLE of Limited-Entry Decision Table

The standards for approving incoming credit orders are as follows:

If an order is for less than \$700, it is to be automatically approved,

If an order is for more than \$700, past records must be examined.

If the past credit record is bad, then the order must be referred
to the managerwho will decide whether or not to approve the order.
Otherwise, the order will be approved.

The decision table for this example will look like the sample
on next page .

March 1970

CENFOR 15- 3

15.1. LIMITED-ENTRY DECISION TABLES (Continued)
Sample ;

LIMITED-ENTRY TABLE

CREDIT

1

2

3

4

IS CREDIT LIMIT OKAY?
FAVORABLE PAYMENT RECORD?
SPECIAL CLEARANCE OBTAINED?

Y

N
Y

N
N
Y

N
N
N

APPROVE ORDER
DISAPPROVE ORDER

X

X

X

X

Notice that if testing of a condition is not necessary in a given
situation, the rule entry space for that particular rule is
left blank. In rule 1 on the credit table, if the credit limit
is okay, the order may be approved without testing conditions 2
and 3.

CENFOR 15- 4

March 1970

15.2. EXTENDED-ENTRY DECISION TABLES

In extended entry tables the condition stub serves only to
identify the variables to be tested, while the condition entry
must define the value or state of the variable. This value may
be absolute or related to another value. Likewise, in such a
table, the action stub only names an action; the action entry
will give the specifics for the action names. Use of the
extended entry format tends to decrease the number of items
listed in both the condition stub and the action stub, thus
compressing the table vertically. It also offers the possi-
bility of considering more than two responses to a given
condition. However, it is often necessary to convert extended
entry tables to limited entry form if they are to be programmed.

Sample :

EXTENDED-ENTRY TABLE

RACE/SEX

1

2

3

u

PERSON'S RACE?
PERSON'S SEX?

CAU
MALE

CAU
FEMALE

OTHER
MALE

OTHER
FEMALE

TALLY

A

B

C

D

Legend :

TALLY A

TALLY B

TALLY C

TALLY D

CAUCASIAN MALES
CAUCASIAN FEMALES
OTHER MALES
OTHER FEMALES

March 1970

CENFOR 15- 5

15.3. MIXED-ENTRY TABLES

When limited-entry form and extended-entry form are combined
into a single table, the resulting table is said to be in
mixed-entry form. Even though these two forms may be combined,
one form must be used exclusively within each horizontal row
of a table.

Sample :

MIXED-ENTRY TABLE

race/sex

1

2

3

4

PERSON'S RACE?
PERSON'S SEX?

CAU

MALE

CAU
FEMALE

OTHER
MALE

OTHER
FEMALE

TALLY CAUCASIAN MALE
TALLY CAUCASIAN FEMALE
TALLY OTHER MALE
TALLY OTHER FEMALE

X

X

X

X

15.4. DETERMINING MAXIMUM TABLE SIZE

In limited entry format each condition has one of two possible
answers: "Yes" or "No." Based on this fact, the number of
conditions in such a table dictates the maximum number of rules
possible. The number of conditions in the table becomes the
exponent of the number 2 to determine the possible number of „
rules. For example, a table having 3 conditions would have 2
(or 8) rules possible. Note that for each condition added to
the table, its possible size doubles. A table with L, conditions
would have 2^ (or 16) possible rules.

CENFOR 15- 6

March 1970

15.5. A METHOD OF ELIMINATING IRRELEVANT TESTS

A table will require the maximum number of rules only when no
logical interaction among the various conditions is involved.
However, when logical interaction is involved, the table will
not use the maximum number of rules possible.

If two rules result in the same action (or actions) and there
is only one difference in their responses, the condition for
which the responses are different should not be tested.

Example :

The following decision table lists all the rules for issuing
cruise tickets (cabin or tourist class) on a steamship:

CRUISE (ALL POSSIBLE RULES)

1

2

3

4

5

6

7

8

IS REQUEST FOR CABIN CLASS?

Y

Y

Y

Y

N

N

N

N

IS CABIN AVAILABLE?

Y

Y

N

N

Y

Y

N

N

TOURIST AVAILABLE?

Y

N

Y

N

Y

N

Y

N

ISSUE CABIN TICKET, SUB 1 FROM TOTAL

X

X

PLACE ON CABIN WAITING LIST

X

X

ISSUE TOURIST TICKET, SUB 1 FROM TOTAL

X

X

PLACE ON TOURIST WAITING LIST

X

X

March 1970

CENFOR 15-7

15.5. A METHOD OF ELIMINATING IRRELEVANT TESTS (Continued)

Notice that for rules 1 and 2 the same action is taken regardless
of the last condition test. Therefore, rules 1 and 2 can be
combined into one rule and not making the test for "tourist
available." Also notice that for rules 3 and 4-, they may be
combined into one rule and omitting the test for "tourist
available." Note that for rules 5 and 7 the test for "cabin
available" may be omitted and then only one rule is required.
Also notice that rules 6 and 8 may likewise be combined into
one rule. The decision table should then be simplified to look
like this :

CRUISE (NECESSARY RULES)

1

2

3

U

IS REQUEST FOR CABIN CLASS?

Y

Y

N

N

| IS CABIN AVAILABLE?

Y

N

TOURIST AVAILABLE?

Y

N

ISSUE CABIN TICKET, SUB 1

X

PLACE ON CABIN WAITING LIST

X

ISSUE TOURIST TICKET, SUB 1

X

PLACE ON TOURIST WAITING LIST

X

CENFOR 15- 8

March 1970

15.6. BIFURCATED TABLE ARRANGEMENT

A table may be rearranged in any fashion as long as you do not
change the responses ("yes" or "no") to any condition within a
rule and as long as the path for each rule continues to result
in the same action.

In a bifurcated table the first condition must have all "yes"
responses grouped together and all "no" responses grouped
together, with no blanks between the first and last rule of
the condition entry. It is allowable to have the "no" responses
first. Each following condition must have similar groupings.
Since blanks are not permitted in a path, the sequence of the
rules and conditions must be changed. The condition having the
greatest number of responses must appear first in the table.
Then the condition having the second greatest number of
responses, etc. After this is done, the rules must be rearranged,
There are usually several valid arrangements.

An example of a bifurcated table follows (before and after).

TABLE BEFORE BIFURCATION

1

2

3

4

5

CONDITION 1

Y

Y

Y

N

Y

CONDITION 2

N

N

N

Y

CONDITION 3

Y

N

CONDITION 4

Y

N

N

ACTION 1

X

X

ACTION 2

X

ACTION 3

X

ACTION 4

X

TABLE AFTER BIFURCATION

1

2

3

5

4

CONDITION 1

Y

Y

Y

Y

N

CONDITION 2

N

N

N

Y

CONDITION 4

Y

N

N

CONDITION 3

Y

N

ACTION 1

X

X

ACTION 2

X

ACTION 3

X

ACTION 4

X

March 1970 CENFOR 15- 9

15.7. THE ELSE RULE

If a table cannot be arranged in bifurcated form, chances are
that it contains contradicitions, redundancies, or omissions.
In a truly bifurcated table containing 2 n rules, the rules in
combination are exhaustive and mutually exclusive. An important
exception to this is a table containing an ELSE rule. The ELSE
rule, by definition, includes all rules not specifically covered
in the table. Usually the rule is nothing more than a rule
column with blanks shown as response to all conditions and an
appropriate action indicated by an "X". The ELSE rule may be
used to detect "illegal" codes.

15.8. SEQUENCE CONTROL DEFINITIONS

Sometimes decision tables contain such statements as START,
RETURN, EXIT, and GO TO -. When coding for a preprocessor these
terms must be expressed in a suitable manner to meet the require-
ments of the language. However, a definition of these terms is
included merely for information.

START - This condition entry indicates action to be taken
on each reference to the table from outside.

RETURN - The action entry which sends control reference
to the first rule and condition in the entry
table.

EXIT - The action entry which serves as an end point for

a table that is referenced by means of a DO statement.
EXIT contains a transfer to the table line following
the DO statement. This allows one table to reference
another as a subroutine.

GO TO - This action entry means control will be transferred.

CENFOR 15-10 March 1970

15.9. EXAMPLES OF DECISION TABLES

Problem 1 : Given an array X of size N, determine whether or not X
is in sequence, storing the result in the logical variable ANS.

DECISION LOGIC TABLE :

START Y N N N

I = N Y N N

X(I) = X(I+1) Y N

1 =

I = 1+1

X

X

RETURN

X

X

ANS = "YES"

X

ANS = "NO"

X

EXIT

X

X

FORTRAN CODING:

(a) 1=0

10 1=1+1

IF (I.GE.N) GO TO 20

IF (X(I).LE.X(I+1)) GO TO 10

ANS = .FALSE.

GO TO ...
20 ANS = .TRUE.

GO TO ...

(b) DO 10 I = 2,N

IF (X(I-I).GT.X(I)) GO TO 20
10 CONTINUE

ANS = .TRUE.

GO TO ...
20 ANS = .FALSE.

GO TO ...

The coding (a) represents a direct translation of the decision
table, whereas (b) is less direct but more efficient in terms of
execution time.

March 1970 CENFOR 15-11

15.9. EXAMPLES OF DECISION TABLES (Continued)

Problem 2 : Given an array X of size N, find its maximum and
minimum values.

DECISION LOGIC TABLE:

START

Y

N

N

N

N

I> N

Y

N

N

N

X(I)J> MAX

Y

N

N

X(I)< MIN

Y

N

1=1

X

MAX = X(I)

X

X

MIN = X(I)

X

X

I = 1+1

X

X

X

X

RETURN

X

X

X

X

EXIT X

FORTRAN CODING :

(a) 1=1

MAX = X(I)
10 MIN = X(I)
20 1=1+1

IF (I.GT.N) GO TO ...

IF (X(I).GE.MAX) GO TO 30

IF (X(I).LE.MIN) GO TO 10

GO TO 2D)

30 MAX = X(I)
GO TO 20

(b) MAX = X (1)
MIN = X(l)

DO 10 I = 2,N
IF (X(I).GT.MAX) MAX = X(l)
IF (X(I).LT.MIN) MIN = X(l)
10 CONTINUE

The coding (b) is actually a mistranslation of the decision table,
but is more efficient with respect to running time and number of
instructions.

CENFOR 15-12

March 1970

15.9. EXAMPLES OF DECISION TABLES (Continued)

Problem 3: Given a positive integer
decimal digits NOD contained in N.

N, dete

rmine th

Examples:

N 36 7 1965

100

586^37

NOD 2 1 4

3

6

DECISION LOGIC TABLE:

START

Y

N N

N<T

Y N

NOD = 1

X

T = 10

X

NOD = NOD+1

X

T = T*10

X

RETURN

X

X

FORTRAN CODING:

EXIT

FUNCTION NOD(N)
INTEGER T
NOD = 1
T = 10
10 IF (N.LT.T) RETURN
NOD = NOD + 1
T = T *10
GO TO 10
END

March 1970 CMF0R ±5 _ ±3

15.9. EXAMPLES OF DECISION TABLES (Continued)

Problem 4 ' Given positive integers A and B, determine if A
is evenly) divisible by B.

Examples: A 12 19 7 30 15 6

B 4 6 7 12 1 24

Is A divisible IES NO YES NO YES NO
by B?

DECISION LOGIC TABLE :

A:B < = >

A = A - B X

RETURN X

DIV = "YES" X
DIV = "NO" X
EXIT X X

FORTRAN CODING :

LOGICAL FUNCTION DIV(A,B)

INTEGER A,B
10 IF (A-B) 40,30,20
20 A = A-B

GO TO 10
30 DIV = .TRUE.

RETURN
40 DIV = .FALSE.

END

CENFOR 15-14

15.9. EXAMPLES OF DECISION TABLES (Continued)

March 1970

Problem 5 ' Given an NxN matrix A, obtain its transpose without
using an auxiliary array.

Note: A "matrix" can be most conveniently represented by a
two-dimensional array. The "transpose" of a matrix is the
matrix obtained by interchanging rows and columns. For
example, the two matrices below are transposes of each other.

12 3

1

4

7

4 5 6

2

5

8

7 8 9

3

6

9

DECISION LOGIC TABLE:

5A

Y

(a) START

N N

I=N

Y N

X

DO 5B

I = 1+1
RETURN
EXIT
FORTRAN CODING:

(a) 1=0

10 1=1 + 1

IF (I.GE.N) GO TO

DECISION LOGIC TABLE:

(b)

5B

X

X X

X X

X

START Y

N

N

J> N

Y

N

TEMP=A(l,J)

A(I,J)=A(J,I)

A(J,I)=TEMP

X
X
X

J=I X

J=J+1 X

X

RETURN X

X

EXIT

X

FORTRAN CODING :
(b) J = I

20 J = J + 1

IF (J.GT.N) GO TO 10
TEMP = A(lfJ)
A(I,J) = A(J,I)
A(J,I) = TEMP
GO TO 20

March 1970 CENFOR 15-15

15.10. MACHINE PROCESSING OF DECISION TABLES

Although many programers still code by hand directly from
completed tables, computer processing of the tables is now a
reality .

The programer codes as usual those segments of the program not
covered by decision logic tables. He indicates in his coding
which tables are to be inserted and exactly where in the pro-
gram they are to be placed. The tables will result in addi-
tional coding being generated and inserted into the program.

At the Bureau of the Census, a decision table preprocessor
is available for use with both FORTRAN and COBOL. The name of
this program is TAB^O. The Census original version is referred
to as TAB7C for use on the Univac 1107, and that version was
later modified and called TAB4IX. A description of TAB4IX
follows.

15.11. TAB4IX: A DECISION TABLE PREPROCESSOR FOR THE UNIVAC 1107
FORTRAN IV COMPILER

This version of the decision table preprocessor was originally
written by Mr. Lewis T. Reinwald while he was with RAC, for
use on the IBM 7040. The program was originally known as TAB4.0.
Different versions of the program were converted by members of
the Computer Sciences Staff for use on the 1107. The current
version is known as TAB4IX.

On facility AT the decision table preprocessor, TAB4.IX, accepts
a card-to-tape input deck made up of TAB4IX control cards,
standard FORTRAN IV statements and decision tables formatted
for TAB4.IX. There are three outputs: One is a PNCHT tape
which can be used as input to an original FORTRAN assembly;
another is a PRNTT tape which produces a listing of the input
with line numbers (for corrections) and error warnings, and the
third which is on facility CT can be used as input to TAB4-IX on
facility AT in a correction pass if required. The card-to-tape
correction deck is on facility BT. The format for the card-to-tape
reel on BT is described in 15.11.9.

Essentially, the preprocessor builds FORTRAN statement frag-
ments into complete FORTRAN statements and keeps track of label
references.

A look at a simple example might be more useful than an attempt
to list formally all of the features of the decision table
preprocessor.

CENFOR 15-16

March 1970

15.11. TAB4.I X: A DECISION TABLE PREPROCESSOR FOR THE UNIVAC 1107
FORTRAN IV COMPILER (Continued)

1 AIYP>£ OWN

2 OLRO =

DECISION LOGIC TABLE
12 3

Y Y N

Y N

1 AIYP -£OWN-» LOWN

2 AIYP + LRO-» LRI

3 LRO +(£ OWN- AIYP) ->LRD
4- GO to Table 2-4-

X

X

X

X
X

Table above formatted as input to TAB4IX
.2010 CONTINUE

C** TABLE 2-10

2 B

T AIYP.GT.ISWN

T OLRO .EQ.0

A LOWN =: AIYP - ISWN

A LRI = AIYP + LRO

A LRO = LRO +- ISWN

- AIYP
A GO TO 2004
.2011 CONTINUE

R

.T

.T

• •

.X

.X

R

.X

R

F

X

.X

March 1^70 CENFOR 15-17

15.11.1. The second line shown has a "C" in column 1 and indicates that
what follows is a comment. A comment in the FORTRAN part of

a program will appear on the PNCHT and PRNTT tapes, but a com-
ment in the table part of the program will appear only on the
PRNTT tape. The TAB^IX program "expects" the first card to
be a FORTRAN statement if it doesn't have a "table number" in
column 1 as described in 15. 11. 2. A. In this case, the
comment would be treated as a FORTRAN comment.

15.11.2. The first line of the table (third line shown) formatted as

"2 B R R R ."

can be explained as follows :

A. Card Column 1

1. The "2" in card column 1, known as the table
number, indicates to the preprocessor that this
card is the beginning of a table as opposed to

a line of FORTRAN coding or a TAB^IX control card.
No FORTRAN statement in a program to be preprocessed
by TAB4-IX should have a statement number of five
digits, as these statement numbers would be inter-
preted as table numbers by the preprocessor.

2. Instead of a "2" here, we could have used a "1"
or a "3" (See I5.H.7.B. for the limitation
on number of ruxes with a table number of 3).
The table number need not be unique within a
program. A table started with a "0" in card
column 1 has a special use explained in I5.II.13.A.

B. The "B" in card column 3 indicates to TAB/+IX that the
columns between the "B" and the next occurrence on this
line (here an "R") are to be used as the beginning part
of any FORTRAN statements formatted in this table. It
is important to notice that when fragments are combined,
they should form legal FORTRAN statements. This
explains the use of ".GT." and ".EQ." in T (test)
clauses and "=", "+" and "-" in A( action ) clauses.
The entries under the B are the result of "factoring
out" from the beginning parts of the FORTRAN statements,
those parts which are common to a line or clause in this
table.

C. "R" - same card as above. The "R" stands for the rules of
a decision table. Only two columns are required for each
of the rules in this table; room enough for ".T", ".F",
".X" or "..". The "." after the third R is an indica-
tion to the preprocessor that it need not scan the card
for data beyond the " . " . The T or A must not appear on
the same margin as the R. However, the table shown could
be reversed, with the R on the vertical margin and T and A
on the horizontal margin.

CENFOR 15-18 mrch 19?0

15.11.3. The first and last lines shown which read ".2010 CONTINUE"

and ".2011 CONTINUE" are used as FORTRAN addressable entrances
to tables.

A. The "2010" line is an entrance to the table shown.

The "2011" line is an entrance to the table, or coding,
following the table shown.

B. The "." in column one for these "CONTINUE" lines is
necessary as this is the indication to the preprocessor
of the first FORTRAN line following a table.

15.11.4- The two lines which read "T AIYP .GT. ISWN .T .T .F"
and "T OLRO.EQ.0 .T .F .." are made up of FORTRAN
fragments (the parts occurring under the "B") and implicit
entries (".T", ".F" and ".."; the parts occurring under the
R's).

A. "T" In column 1 indicates to the preprocessor that it
is dealing with a test and in this case is concerned
with FORTRAN lines of coding which when assembled could

"IF(. NOT. (AIYP. GT. ISWN)) GO TO 20338"

or "IF(. NOT. (OLRO.EQ.0)) GO TO 20236".

B. The ".T" under the R's corresponds to the "Y's" or
"Yes path" in the decision tables; the ".F" corresponds
to the "N's" and ".." is an indication to the pre-
processor to ignore a cell. The ".T" and ".F" have
meaning only for TESTS ( T ) ; the ignore ( . . ) is
applicable to the A( action) also.

15.11.5. The four lines which begin with "A" in column 1 are written
In FORTRAN format and are "actions" to be taken if the above
rules are "satisfied." The ".X" under the second rule for the
first A line indicates that variable LOWN is set equal to
AIYP - ISWN. The ".." in the first line, but under the first
and third rules indicates that this action is to be ignored
for these rules. It is worth noting that a statement (T or A)
can be continued on another line as on the third A line. The
.X has no meaning for a "T" line.

.

March 1970

CENFOR 15-19

15.11.6. EXPLICIT ENTRIES

The decision table could be rewritten without the use of the

B described in I5.H.2.B. Here the FORTRAN fragments

appear under the rales. In this table, the entries "AIYP. GT. ISWN"

and "GO TO 2044-" are called explicit entries. The implicit

entries ( .T, .F, . . , .X) refer to the nearest explicit entry on the

left.

2

R

R

R

T

AIYP .GT. ISWN

.T

.F

T

0LR0 .EQ.0

.F

• •

A

• •

LOWN =

AIYP -
ISWN

• •

A

LRI = AIYP+
LRO

• •

A GO TO 2004

,X

LRO =
LRO +
ISWN-
AIYP
.X

CENFOR 15-20 March 1970

15.11.7. L - Card.

The following example illustrates the use of the L - Card.

12 3

1 AIYP^OWN Y Y N

2 OLRO = Y N

1 2"0WN =^0WN - 1 X

2 ^>0WN =^0WN - 2 X

3 ^OWN =«£0WN - 3 X

4 GO to Test 1, Rule 1 X

5 GO to Table 2-2 X

6 GO to Table 2-3 X

Table above formatted as input to TAB4-IX

2 B R R R

L 201

T AIYP.GT.IOWN .T .T .F

T OLRO.EQ.0 .T .F

A TOWN = TOWN - 2 13

A GO TO 2 003 002 01

A. The L-card assigns statement number 201 to the first rule
and first test of the table.

B. FORTRAN FORMAT statements must always be assigned statement
numbers with an L-card. If a test and a rule are referenced
within a table by a "GO TO," assign an "L-card" to the particu-
lar rule as in the example. The statement number assigned
should be less than five digits to avoid conflict with the
five digit statement numbers assigned by TAB4JX. If any
tables use table number "3" there should be less than 27
rules in all.

March 1970 CENFOR 15-21

15.11.8. TAB^IX CONTROL STATEMENTS

A. There are five TAB4-IX control statements used for the
FORTRAN preprocessor and they all have a "-" punch in
column 1.

B. Two of the control statements are the standard FOR and
MAP cards and except for the "-" in column 1, instead
of the 7/8 punch, they function as in FORTRAN for the
UNI VAC 1107.

C. A "-IBSYS" card should be the last card before the
Standard Stop card on any input to TAB^IX.

D. Some coding which is required at several places in the
program, such as COMMON statements,, can be stored initially
and called as needed. This is done by the "-TASAV" and
"-TARTV" statements.

The first card used is the -TASAV card with a name starting
in column 16. This name should have six or less characters.
The cards that follow contain the images to be stored. A
"-TASAV" card with blanks in columns 16-21 ends the deck to
be stored. A "-TARTV" card with the same name in columns 16-21
as the "-TASAV" card used, will enter these images into the
program at the place the "-TARTV" card appears.

15.11.9. TAB4-IX SETUP

The input to TAB4IX (facility AT) is a card-to-tape output,
or CT output from TAB^IX. The PNCHT output from TAB4IX can
be used as input to an original FORTRAN assembly; the PRNTT
facility output is to be printed.

CENFOR 15-22 March 1970

15.11.10. CORRECTION PASS

A card-to-tape output which is used as input to TAB4IX,
facility AT, might need to be changed. The PRNTT tape from
TAB4-IX shows card numbers (starting in column 74). A "+" in
column 1 can be used as a control punch in the same way as
"-" is used in making standard FORTRAN corrections.

Insertion

"+1" means insert after card number 1, the following
corrections.

Replacement

"+1,1" means delete card number 1, replace with
following corrections.

Deletion

"+1,1" means delete card number 1.

The corrections are preceded and followed by standard start
and stop cards; the deck is card-to-taped and used as input
on facility BT; the output from the prior run, facility CT,
is entered on facility AT.

15.11.11. PRNTT TAPE

In addition to the listing of the input to TAB4-IX with the
card numbers, the PRNTT tape will show some diagnostics for
the decision tables. If a table is incomplete (no ".F's"
could make a table incomplete) TAB4-IX will generate a "CALL
DUMP." This will result in a compiling error unless the
input program is provided with a subroutine named DUMP that
initiates a core dump operation. (See 15.11.14.B. for
example of an incomplete table . )

ELSE Rule - An Else rule does not contain any condition
entries. The Else rule, when used, appears as the last rule
in the table. If none of the rules on the left of the Else
rule have been satisfied, then control is directed to the
actions shown in the Else rule. When this condition arises
and there Is no else rule provided, the preprocessor will
generate "CALL DUMP" to indicate an incomplete table as
discussed in 15. 11. 11.

March 1970 CENFOR 15-23

15.11.12. BOUNDS

A. Number of Input cards.

No table should have more than 300 cards as input.

B. Number of =TASAV input cards.

The sum of the number of cards read in as "-TASAV"
cards should be less than 201.

C. There should be less than eleven sets of -TASAV cards.

D. Punched cards prepared for input to TAB^IX should not
use more than 72 columns.

E. TAB4IX assigns statement numbers to generated FORTRAN
statements by taking the table number as the first
digit, the rule number as the next two digits and the
clause number as the last two digits. In I5.II.6.
the line which reads "LRI=AIYP+LR0" is clause "04".
The line which reads "0LR0 .EQ. is clause "02".

Clause numbers are numbered consecutively and continuously
for each table number. When more than 99 clauses have
been encountered, the preprocessor will increase the rule
count by the maximum number of rules encountered (plus
one) in any previous decision table having the same
table number as the current table. The current table
and the previous tables must be part of the same sub
program. When the number of rules exceeds 99, the
preprocessor lists a warning on the PRNTT tape of the
possible existence of duplicate statement numbers. By
alternating the table numbers used, duplication should
be avoided. When a "FOR" card is encountered, statement
numbers start over for each table number. The only
statement numbers shown are those which are referenced.

CENFOR 15-24- March 1970

15.11.13. There are additional codes that can be used on the margins
of decision tables. Their use should be limited. The
main virtue of the preprocessor is that decision table
specifications can be quickly copied in order to get a running
program that accurately reflects the job specifications. The
use of some of these additional codes can lead to some com-
plicated constructions that detract from the simplicity of
TAB^IX. Examples for A-G are shown in paragraph 13.

A. Table number 0. Table number differs from tables
numbered with 1, 2 or 3 mainly in two ways:

(1) No FORTRAN IF statements are generated, therefore
no conditions are involved.

(2) The T for test is omitted. There is an "R-margin"
and an "A-margin" .

B. E - An "E" is used much as a "B", but the E stands for End.
Those fragments which are common to the "End" of a clause
are "factored out" and written under an "E".

C. K - The K concatenates a fragment to the end of the
rule entry.

D. "*" - For an action, the "*" is the same as a "K".

For a test, an "-" concatenates with an ".AND." connector.

E. "/" = Slash is the same as "*" except "/" concatenates
with an ".OR." for a test.

F. S - or Statement. The "S" appears on the T - margin and
indicates an action to be taken regardless of the outcome
of the tests.

G. P - Procedure. Differs from a rule in that it is con-
sidered even if rule on its left is satisfied. See the
difference between the coding generated, for examples
15. 11. 14. B. and I5.II.I4.C.

March 1970 CENFOR 15-25

15.11.14-. EXAMPLES FOR PARAGRAPH 15.] 1.13 .
A.

B E A A A A

R EQUIVALENCE ( LR LO IR JO
K , ) LCL LPH ICL IPH

The above would generate these FORTRAN statements:

EQUIVALENCE(LR,LCL)

EQUIVALENCE ( LO , LPH )
EQUIVALENCE(IR,ICL)
EQUIVALENCE(JO,IPH)

B.

1

B

E

R

R

s

X = X +

1.

2.

T

X.EQ.

1.

2.

/

Y.EQ.

2.

3.

A

X = X +

1

3

K

4

5

2

6

The above could generate :

X = X + 1.

IF(.N0T.(X.EQ.1..0R.Y.EQ.2))G0 TO 10201

X = X + H25

GO TO 10304
10201 X = X + 2.

IF( .NOT. (X.EQ.2. .0R.Y.EQ.3. ) )CALL DUMP

X = X + 3465

GO TO 10304
10304 CONTINUE

CENFOR 15-26 March 1970

15.11.14-. EXAMPLES FOR PARAGRAPH 1 5. 11. 13. (continued )

c.

1

B

E

R

P

s

X = X +

1.

2.

T

X.EQ.

1.

2.

/

Y.EQ.

2.

3.

A

X = X +

1

3

K

U

5

2

6

X = X + 1
IF(.N0T.(X.EQ.1..0R.Y.EQ.2.))G0 TO 10206

x = x + 14.25

GO TO 10206
10206 X = X + 2.

IF(.N0T.(X.EQ.2..0R.Y.EQ.3.))CALL DUMP

X = 3465
GO TO 10309
10309 CONTINUE

March 1970 CENFOR 15-27

15.11.15. COMPARISONS BETWEEN "STRAIGHT FORTRAN" CODING AND THE
TAB£EX PREPROCESSOR

A. Programing and debug time

At this date there is not too much direct comparison
between these two forms of programing, but there
should be considerable saving (50%) in using TAB4-IX
when the specifications are in decision table format.

B. Preprocessor time

The TAB4-IX decision table preprocessor can be written
in about 1500 lines (cards) of decision table format.
It takes about three minutes and 4-0 seconds to pre-
process this deck. At the present time this is the
best estimate we have for preprocessor time per number
of cards.

C. Core Space

At this time it seems that a program which is written
in decision table format, processed through TAB4.IX and
then compiled, will take twenty to thirty percent more
room in core than one which is coded from decision
tables in straight FORTRAN.

D. Running Time

The running time of the compiled program output from
TAB4-IX seems to be comparable to that of one coded in
straight FORTRAN.

CENFOR 15-28

March 1970

15.11.16. 1107 OPERATING INSTRUCTIONS FOR TAB4IX

form BC-558

(3-17-67)

U.S. DEPARTMENT OF COMMERCE
BUREAU OF THE CENSUS

1107 OPERATING INSTRUCTIONS

A. Div. code

G. Program
information

B. Project number

[TEST
(Other than
s ort/ merge)

C. Program name

TAB4IX

2. TRANSCRIPTION
I I PRIOR TO TEST

□ UTT

I I RUTT
I I AFTER TEST

APPROXIMATE NUMBER
OF OUTPUTS

3. □ sort Emerge

a. option coding used

□ own q dummy i i none

b. EXTERNAL LIBRARY NAME

c. PROGRAM TO BE USED
(II other than standard)

E. Tel. Ext.

F. Job number (PD)

4. LIBRARY MAINTENANCE
a. TYPE OF SUBROUTINE

TIME

I I ASSEMBLY
TIME

b. NO. OF COPIES REQUIRED

c. EXTERNAL LIBRARY NAME

TO BE COMPLETED BY PROCESSING DIVISION

a. BINARY TAPE NO.

b. SOURCE

I I FURNISHED
I I FROM

ASSEMBLY

->.

a. OWN CODING TAPE NO.

b. SOURCE

I I FURNISHED

I FROM LIBRARY MAINTENANCE

a. OWN CODING TAPE NO.

b. SOURCE

I FURNISHED
2 FROM ASSEMBLY

H. Magnetic
tape
input(s)

I I NONE
S3 INDICATE

TAPE
NUMBER

(a)

(If servo
alternation
specify in

TRANS.

TAPE NO.

(DPSD)

(b)

ASSIGNED

FACILITY

NAME

(c)

AT

BT

EXTERNAL LABEL
(d)

REMARKS
(e)

Original card-to-tape or
"CT^ output

Corrections (if any)

from card-to-tape

I. Magnetic
tape
output(s)

I Inone

POJJNDICATE

(If servo
alternation
specify in

"M")

ASSIGNED

FACILITY

NAME

(a)

EXTERNAL LABEL
(b)

CT

PNCNT

PRNTT

TAPE

NUMBER

(DPSD)

(c)

TRANS.

TAPE NO.

(DPSD)

(d)

REMARKS
(e)

To be used as CT input in
nfty+. TATV . TY mm

To FORTRAN original assembly

PRINT TAPE

J. Jump
switches

CONDITIONS FOR SET AND/OR RELEASE

16. PROGRAMING
TECHNIQUES AND TIPS

March 1970 CENFOR 16- 1

16.1. FORTRAN: EXTERNALLY EXPANDABLE ARRAYS USING NAMED COMMON

The dimensions of Named COMMON areas in FORTRAN programs may be
expanded at run time (by the use of schedule TAL cards) without
a recompilation step. This technique is useful in general pur-
pose programs where the dimensions of certain areas depend on
varying externally controlled conditions.

Example 1 :

If the statement:

COMMON/NAME/ JARAY (100)

appears in the program, and a schedule TAT, card is used which
appears as follows :

JRID, TAL, LNAME/300.

then the true dimension of JARAY is (400).

Note that "NAME" and "LNAME" together with the initial length of
the table will all appear under the heading "CORE" in the Elf
Facility Synopsis.

Example 2 :

If the statement:

C0MM0N/NAME2/KARAY (2,5,50)

appears in the program, and a schedule TAL card is used which
appears as follows :

JRID, TAL, LUAME2/10.

then the true dimensions of KARAY are (2,5,51)

Rule: In a multi-dimensioned array of N dimensions, only the Nth
dimension is affected by the increase shown on the TAL card. For
this reason, the increase must be a multiple of the product of the
first N-l dimensions.

In the above example, any increase in KARAY must be in multiples
of 10 (the product of the first two dimensions).

When usinp the TAL card to increase a named COMMON area, the letter
"L" must precede the name of the area.

CENFOR 16- 2 March 1970

16.1. FORTRAN; EXTERNALLY EXPANDABLE ARRAYS USING- NAMED COMMON (Cont.)

Exarrcle 3 :

If the statement:

C0MM0N/NAME3/LARAY (50, 10)

appears in the program, and a schedule TAL card is used which
appears as follows :

JRID, TAL, LNAME3/500.

then the true dimensions of LARAY are (50,20).

Example 1 :

If the statement :

C0MM0N/NAME4/MARAY (50)/NAME5/NARAY (80)

appears in the program, and a schedule TAL card is used which
appears as follows :

JRID, TAL, LN^LRL/LC, LNAXI5/50

then the true dimension of MARAY is (90) and the true dimension of
NARAY is (130).

If the statement:

com::::, ':;a:-z6/jaray (50,1c), raray (30)

appears in the program, and a schedule TAL card is used which
appears as follows :

JRID, TAL, LNAMEc/60.

then the true dimensions of JARAY remain at (50,10) and the true
dimension of KARAY IS (90).

Note that in the case where mere than one array appears in the
same COMMON area, only the last array is affected by the increase
shown on the TAL card.

March 1970 CENFOR 16- 3

16.2. COMPILING LARGE FORTRAN PROGRAMS

During the compilation of very large FORTRAN programs, there is
a danger of overflowing the capacity of the FORTRAN compiler.
However, if the program is well "segmented" into a series of
external subroutines (each external subroutine is handled separ-
ately by the compiler) , there is actually no practical limit
to the size of FORTRAN programs. Large programs should be
designed with this in mind from the beginning. Generally, each
external subroutine, as well as the main program itself, should
be limited to less than 700 FORTRAN statements each.

A specific problem has been encountered with programs containing
a large number of DATA statements in the body of the main program.
To avoid this problem, the DATA statements may be compiled
separately from the main program in one or more external subrou-
tines. By the use of COMMON statements, the DATA statement
contents are made available to the main program or to any other
external subroutine in the program.

A simplified example showing the use of COMMON and DATA statements
in an external subroutine is shown below:

/././•* anypro rewint

@ map anypro, p.

@lip for anypro, anypro, p.
common/name/narray( 10 )

CALL SUB (first executable statement)

END

@lip for sub, sub, q.
subroutine sub
common/name/narray( 10 )

DATA (NARRAY( J) ,J=l,10)/l,2,3,4,5,6,7,8,9,10/

RETURN
END

))))))

Note the one-time CALL to the data subroutine. This is necessary
to cause the data subroutine to be allocated.

For a description of "SEGF0R", the propram which provides for
drum overlay segmentation, see Part 16. 17-

CENFOR 16- 4 March 1970

16.3. DEFINING SUBROUTINE FORMAL ARGUMENTS

The following examples suggest a method for defining formal
arguments to minimize code generation and execution time.

When formal arguments are referenced in the body of a subroutine,
each reference is posted with the address of its corresponding
actual argument in the subroutine call statement.

It therefore becomes desirable to minimize the number of
references to the formal arguments of the subroutine. This can
be. accomplished by assigning each formal argument to a variable
where possible, and then referencing the variable in the body of
the subroutine instead of the formal argument.

Example :

Usual Method

CALL PATCH ( II, 12, 13, U)

• • •

SUBROUTINE PATCH ( J1,J2, J3,J4)
DIMENSION J1(J2),J3(J4)

• • •

IF(N.EQ.J2) GO TO 5

• • •

M = J2*J4

5 K = K+J4

• • •

MM = J2
MX = J4

Suggested Method

SUBROUTINE PATCH ( J1,J2,J3,J4)
DIMENSION J1(J2),J3(J4)

• • •

J = J2
L = J4

• • •

IF (N.EQ.J) GO TO 5

• • •

M = J*L

• • •

5 K = K+L

• • •

MM = J
MX = L

March 1970 CENFOR 16- 5

16.4. MULTIPLY/DIVIDE SEQUENCE

During a calculation of the type N = I*j/K, the intermediate
product of I* J may be desired to a length of 72 bits. Subsequent
division by K would produce a 36 bit quotient to be stored in N.

When this operation is performed in two statements however, the
results may not be desirable. Note the following:

M = I* J
N = M/K

The product of I* J is truncated to the low order 36 bits and
stored in M. The division by K may produce an incorrect quotient
if the value of I* J is greater than 36 bits.

The statement is properly written as N = I*j/K, where a 72 bit
product is retained for I* J. This is followed by division on
the 72 bit dividend by K to produce the proper result to be stored
in N.

16.5. REAL TO INTEGER CONVERSION

The following statement is printed in Section 3.2.1 of the
FORTRAN IV and V manuals:

"If a statement implies conversion of an INTEGER constant
to a constant which is either REAL, DOUBLE PRECISION, or
COMPLEX, or vice versa, then the absolute value of the
constant must be less than or equal to 2^7_i = 134,217,72V. "

This statement must be observed in all conversions resulting in an
INTEGER value. The compiler generated coding does not convert
REAL or DOUBLE PRECISION numbers to INTEGER that are within the
range of 227 (134,217,728) to 235_i (34,359,738,367).

The assumption is that the rule has been observed, therefore the
conversion routine proceeds from a possible "maximum" value of
227-1. The effect of this is that a value greater than 227_i would
actually be scaled down upon converting it to integer thereby
producing an incorrect result.

Where this option is desired, the following subroutine will
convert real numbers to integers in the range: to 34,359,738,367.

Call statement:

CALL SLIDE (I, REAL, INTGR, \$998)

1=1, when REAL is single precision
2, when REAL is double precision
REAL = real or double precision value, positive or

negative sign
INTGR = signed integer equivalent of REAL
\$998 = label of statement for error action when the

absolute value of REAL exceeds 34,359,738,367.

CENFOR 16- 6 March 1970

16.5. REAL TO INTEGER CONVERSION (Continued)
Source Coding

SUBROUTINE SLIDE (K,ARG,N,\$)

DIMENSION ARG(2),FP(2),M(2)

DATA MX / 0777777777/

DATA HIVAL/ 34359738368./

DATA GOVAL/ 134217728./

DATA X / 1.0 /

DATA MC / 0377000000000/

X = SIGN (X,ARG(1))

FP(1) = ABS(ARG(1))

IF(FP(1) - GOVAL) 50, ,

IF(FP(1) - HIVAL ) 20 , ,

RETURN U
20 M(l) = FP(1).AND.MX

NC = LSRL((FP(1).AND.MC),27)

NCD = NC-155

IF(K.NE.2) GO TO 30

FP(2) = .ABS(ARG(2))

M(2) = LSLL(FP(2),9)

CALL LDSLL (M(l) ,M(2) ,NCD, J, NULL)

GO TO 51
30 J = LSLL(M(1),NCD)

GO TO 51

50 J = FP(1)

51 IF(X.LT.O) J = -J
N = J

RETURN

March 1970 CENFOR 16- 7

16.6. INTEGER TO DOUBLE PRECISION FUNCTION

In an arithmetic expression, if the mode of one operand is double
precision and the mode of the other operand is integer or real,
then the mode of the expression is double precision. This means
that all operands will be converted to double precision in order
to execute the arithmetic expression. When large integer values
in the range 134,217,727 to 34,359,738,367, are converted to
single or double precision by the FORTRAN IV compiler, there is
a loss of significance.

Example :

Convert the integer variable N, containing the value 34,359,738,367,
to a real number.

X = N

The value of X will be 34,359,738,112. The loss of 255 is caused
by the limit of 27 bits for the mantissa of a real number.

This loss of significance may not be acceptable in computations
involving a series of arithmetic operations with large integer
and double precision numbers.

There is no built-in FORTRAN IV function for converting an integer
number to double precision where one may retain significance of
a large integer number (134,217,727 to 34,359,738,367). The auto-
matic conversion of integer values to the double precision mode
by the compiler is carried out as a single precision value with
the least significant word set to zero.

The following function may be used in cases where the loss of
significance may be a factor in the conversion of large integer
numbers to the real mode. This function divides the integer
number into two parts - each is less than the capacity of a single
precision real number and retains full significance for each
part. The two parts are added to produce a double precision sum.
This value may then be used with other double precision terms
with no loss in significance from the original large integer
value .

The name of the function must first be defined as type double
precision in the main program:

DOUBLE PRECISION DP

CENFOR 16- 8 March 1970

16.6. INTEGER TO DOUBLE PRECISION FUNCTION (Continued)

The coding for the function may be formatted as an internal or
external subprogram. For an internal subprogram, N should be
typed integer to be made a local variable.

FUNCTION DP(INT)
INTEGER N

DATA MSM 10377000000000/
DATA LSM / 0777777777/
N = INT

NSIGN = 1 SIGN

IF(N),5,5 SIGN

NSIGN =0 SIGN

N = IABS(N) SIGN

5 1= N. AND. MSM
DP = I

J = N. AND. LSM
DP = DP + J

IF(NSIGN.EQ.O)DP = -DP SIGN

RETURN

The function as written contains fifteen lines. If the sign of
the integer value (INT) is not a factor, then the lines labelled
SIGN may be removed, leaving ten lines.

Usage Example :

The expression:

XS = N + X
where: XS = double precision
N = integer
X = double precision

is now written as :

XS = DP(N) + X
where: XS = double precision

N = converted to double precision by the function DP.

X = double precision

March 1970 CENFOR 16- 9

16.7. TABLE LOOK-UP TECHNIQUES

16.7.1. DIRECT

The table contains as many entries as the value of the highest
numeric table code being processed. The code being searched
for literally becomes the index for accessing the corresponding
table entry.

Limitations: (l) The codes being processed must contain
entirely numeric digits, (2) since the codes usually are not
in straight numeric sequence (e.g., 001, 002, 003,004-, etc. ) gaps
occur between codes and the table size becomes prohibitive
and (3) input cards must be read at the beginning of each job
to fill the table.

16.7.2. SERIAL

Searching the table beginning with the first table position
with each transaction and incrementing the index by one until
the condition being tested equals the corresponding table
code is a method.

Limitations: (l) When the table size exceeds 20 to 25 entries,
the processing time to test all the entries becomes prohibitive,
and (2) input cards must be read at the beginning of each job
to fill the table.

16.7.3. BINARY

In the binary search approach, the argument to be found is
first compared against the middle of the table, and on the
basis of this comparison, the upper or lower half will be used
for comparison. The table will be halved until an equal
condition occurs or the size of the table is reduced to zero.
The table arguments must be in sequence. A count of the number
of entries (easily generated when the table is filled) is also
required.

16. 7.4-. LITERAL

A table does not appear in the data division, but the codes being
searched for appear as literals in the procedure division. A
conditional statement must be written for each code to be pro-
cessed. When the literal being tested equals the transaction
code being processed, the corresponding data appears as a literal
and is moved to a common storage area.

Limitations: (l) Limited to fixed codes not subject tc change
since a literal change requires source language changes and
recompilation, and (2) far more coding (programing time) is
required than in the other three techniques.

CENFOR 16-10 March 1970

16.7.5. EXAMPLES

16.7.5.1. DIRECT LOOK-UP

1. A variable IV with possible binary values of 0-99 is to
be used to pick up a code from a table NTABL of 100
entries using the value of IV as the index for locating
the code and placing the code into NV:

NV = NTABL (IV +1)

2. A variable NX with possible binary values of 0-12 is to
be used to recode these values as follows and to store
their recode into the variable NY:

0-3 recode 1
4-7 recode 2
8-12 recode 3
NX = NX+1

GO TO (10,10,10,10,20,20,20,20,30,30,30,30,30), NX
10 NY = 1

GO TO 4-0
20 NY = 2

GO TO 4-0
30 NY = 3
GO TO 4.0

16.7.5.2. SERIAL LOOK-UP

A variable IV is to be compared with a list NA of 20 values
and when a match is made, a tally is to be made in the
corresponding position in table NB.

DO 10 J = 1,20

IF (IV - NA(J)) ,20,

10 CONTINUE

20 NB (J) = NB(J)+1

March 1970 CENFOR 16-11

16.7.5.3. BINARY LOOK-UP

A variable IV is to be compared with a list NA of 100 values
and when a match is made, a tally is to be made in the cor-
responding position in table NB. The list NA has been sorted
using a programer written subroutine called SWAP prior to
this procedure. A programer written subroutine called SEARCH
delivers a subscript NSUB which may be used as required.

CALL SWAP (NA,100)

CALL SEARCH (NA, 100, IV, NSUB) (See 16.16.)

NB(NSUB) = NB (NSUB) + 1

16.7.5.4. LITERAL LOOK-UP

A code NCODE is to be compared against the XS3 literals
0,3,7, and 9 to determine which one it matches. If a
match is made, then a recode of 1 is to replace the original
code. If no code is found, make the recode 0.

IF

(NCODE .

EQ. 3)

GO TO 20

IF

(NCODE .

EQ. 6)

GO TO 20

IF

(NCODE .

EQ.10)

GO TO 20

IF

(NCODE .

EQ.12)

GO TO 20

NCODE =

GO

TO 30

20

NCODE = 1

30

CONTINUE

CENFQR 16-12 March 1970

16.8. A SUBROUTINE FOR SORTING WORDS IN AN ARMY

SUBROUTINE SWAP (A,N)
Comment - A is the array of size N

INTEGER A, TEMP

DIMENSION A(N)

Nl = N-l

DO 20 I = 1,N1

IF (A(I). LE.A (1+1)) GO TO 20

DO 10 J = I, 1, -1

IF (A(J).LE.A(J+1)) GO TO 20

TEMP = A (J)

A(J) = A(J+1)
10 A(J+1) = TEMP
20 CONTINUE

RETURN

END

March 1970 CENFOR 16-13

16.9. A RANDOM NUMBER GENERATOR ROUTINE (To Generate Numbers as Large
as 999 )

DATA T /0244400000000/

DATA MM /0377777777777/

K = 2 ** 18 + 3

IU = UBS (MSR UHDATE))

XM = 999
Comment - ABOVE ESTABLISHES INITIAL VALUES
Comment - BELOW GENERATES A RANDOM NUMBER EACH USE

IU = MM. AND. (IU*K)

V = IU/T
Comment - COMPUTE REAL RANDOM NUMBER WITHIN RANGE

R = XM * V
Comment - FOR INTEGER RANDOM NUMBER IR = XM *V + 1
Comment - XM is upper limit

Comment - IU is start for random number, should be large
Comment - V is real random fraction
Comment - IR is integer random whole number

CENFOR 16-14 March 1970

16.10. A SUBROUTINE TO CREATE A CHECK DIGIT FOR A TWELVE-DIGIT NUMBER
SUBROUTINE CHKDIG (N,M)

N =

DO 100 I = 12,2,-2
NT = (IXTRCR (M,I) -3)*2
IF (NT.GT.9) NT=NT+54
100 N = JRS (NT,5)+JRS(NT,6)+(lXTRCR(M,I-l)-3)+N
N = MOD (N.10)+3
IF (N.NE.3) N=l6-N
RETURN

16.11. METHOD USED TO CREATE CHECK DIGIT FOR XS3 FIELD

1. Multiply by 2 the even digits (or odd digits).

2. As each digit is multiplied, if the sum is 10 or more,
create 2 digits.

3. Add all digits together and drop the ten's portion
of the total.

U. Subtract the remaining unit's position from 10 and
the result is the check digit. If the result of
step 3 is 0, the check digit is 0.

EXAMPLE : A ten-digit field; create check digit.
8735069505

X2

14

X2
10

X2
12

X2
10

X2
10

U

+

+

2

+

+

=

6

1

+

1

+

1

+

1

+

1 =

5

8

+

3

+

+

9

+

=

20

10/31/1 Remainder

10 -1

= 9 the check
digit

---__.

:

_ — . . _ ~

• -

:::: :;:: sr,36ooooc ,6oooc ::

-

— — ...

N-SIOS A ::

--

- -

:ie

;

de

] . r r

Cle

:ie

V

-

*A subroutine :l;:X is available vhich *d
" r lAl TIME ZIOCK DPTERBOGATEE Al xx>couc.

CENFOR 16-16

March 1970

16. H. 2. INTEGER BB

DIMENSION BB(5,6)

CALL ZERO (BB,30)

CLEARS ALL OF BB.

CALL ZERO (BB,5*6)
16. 14.. 3. PARAMETER Nl = 100, N2 = 10, N3 = 25

CLEARS ALL OF BB.

In each case, entire
array will be cleared,

16. 14. 4-. INTEGER VAR

• • •

CALL ZERO (VAR,1)

Note: VAR is a

variable here
NOT an array.

CLEARS VAR.

CALL ZERO (VAR, 10)

NOTE:

CLEARS VAR AND NEXT
NINE LOCATIONS.

1. Subroutine expects an array name, but starting location
may be given in calling statement.

2. A variable may be given instead of an array in CALL
statement.

3. Subroutine is set up in terms of a one-dimensional array,
but more-than-one-dimensional arrays may be cleared with
the routine.

CAUTION:

1. If you are clearing less than an entire array
which is more than one-dimensional, be sure you
are clearing the area you intend.

2. If value of N exceeds dimension limits, be sure
what the following locations are.

March 1970 CENFOR 16-17

16.15. SEQUENCE CHECKING

Many problems require that the input data be arranged in a
logical sequence (ascending or descending) according to desig-
nated key words within an item. For example, a file of data
may be required to be in state, county sequence. Before
processing such data, it is often required as a safeguard that
a check be made to insure the fact that a good sorted file is
being processed. Therefore, the need to sequence check. The
Arithmetic IF is made to order for this kind of checking. An
example of sequence checking appears below. Note that if
there is a break in sequence, an error condition is noted and
the program terminates by calling a programer written subroutine
called DUMP containing the single statement RETURN 0.

IF (MAJORP - MAJORN) 30, ,20

IF (MINORP - MINORN) 30, 30, 20
20 CALL TYPE (20, 20H SEQUENCE CHECK FAILS)

CALL DUMP
30 CONTINUE

SUBROUTINE DUMP

RETURN

16.16. SEARCH: PROGRAMER 'S SUBROUTINE FOR BINARY SEARCH

Purpose — The purpose of this routine is to search a sequenced
list of single-word items for equality against a given item or
argument. If a match is found, the subscript location where
equality occurred in the list is placed in a flag cell. If no
match is found, the flag cell will be zero. There will be an
execution time advantage over the serial scan method if the list
size is 35 or greater.

Method — The argument to be found is first compared to the
content of the midpoint in the list of items. On the basis of

this comparison, the upper or lower half of the table is used to
continue the search. The list will be successively halved until
an equal condition occurs, or the size of the list reduces to
zero.

CENFOR 16-18 March 1970

16.16. SEARCH: PROGRAMER'S SUBROUTINE FOR BINARY SEARCH (Continued)
Coding

SUBROUTINE SEARCH (LIST,N,NFLD,NSUB)
INTEGER HE,LE,S
DIMENSION LIST(N)
HE = N+l
LE =

10 S = LSRL ((HE+LE),1)

IF (NFLD-LIST(S)) 15,12,11

11 LE = S
GO TO 20

12 NSUB = S
RETURN

15 HE = S

20 IF ((LE+1)-HE) 10, ,10

NSUB =

RETURN

Definitions

LIST = Sequenced array of single-word items to be searched.

N = Number of single-word items in LIST.

NFLD = Argument searched for in LIST.

NSUB = Flag cell containing the subscript location where equality
occurred in LIST, or zero when argument cannot be found
in list.

December 1970 CEMFOR 16-19

16.17. DRUM USE

16.17.1. FHP80DRUM

16.17.2. FOLION

16.17.3. EX

16.17.4. SCHEDULE CARDS

16.17.5. PRACTICAL USES OF THE DRUM

16.17.6. SEGFOR - DRUM OVERLAY SEGMENTATION

CENFQR 16-20

December 1970

Q

Z
<

</>

#

III

«/>

l/>

H

</>

Z

</)

LU

LU

z

ce

5

o

q

O

U

Q

LU

<

</»

LU

ex

o:

i/i

<

<

az

_l

_i

D

Z)

_j ii

o

o

3 u

z

z

o <

<

<

z a:

•t

CO

< h-

•<»•

o

co «o

o

CM

II

II

Q

a z

Z

< o

<

CO

x ai
5 «/>

E
»

*-

H
X

0)

c

n

M

(i

E

3

V)

«

c

01

o

00

03

•

u.

.- ai

CENF0R 16-21
16.17.1. FH880 DRUM

The drum is a storage device; it is not part of the central computer.
The Census FH880 configuration has two drum units each vdth a capacity of
786,432 computer words (a total of 1,572,864). After the initial access
time (average 17 milliseconds) required to find the first location requested
in the drum, the transfer rate is 16.5 microseconds per word. Therefore,
the time required for a sizable transfer is not - much more than for one word.

The Census FH880 drum subsystem consists of a channel synchronizer,
a control unit, a power supply and two drum units. The drum and head
subassemblies are mounted in the drum cabinet. The drum is an oxide coated
cylinder, 30 inches long and 24 inches in diameter.

Forty head blocks are positioned around the drum. Mounted in each
associated with one track around the drum. There are 128 6-track
recording bands across the drum, accounting for 768 data tracks. Some
of the remaining tracks are used for parity, reference, and timing functions.
The rest are categorized as spares. Each band is further divided into
is further divided into three angular sections. The angular section,
within any single angular address, represents the location of a 36-bit word.
This scheme provides 6144 logical addresses for each band on each drum unit.
The 36-bit data word is stored in the form of a 6 x 6 array. The array
results from a combination of 6 rows and 6 tracks of data. Each of the three
sections of a drum, instead of constituting a single entity, is divided into
2048 segments, one for each angular address, and these segments are arranged
around the periphery of the drum in a repetitive pattern: ASO, AS1, AS2.. .etc.
Addresses for drum unit range from to 02777777. Addresses for drum unit 1
range from 030000C0 to 05777777.

CENFOR 16-22

The three designators for forming the address of the drum are as

follows:

Decimal Octal

Angular Section (Drum 0- 00-02) 00-05 00-05

(Drum 1- 03-05)
Band Number 000-127 000-177

The format required by the computer is shown in the following chart:

Angular

Band

Angular

Section

Number

Bits

22-18

17-11

10-0

Octal

5

17 7

3

7 7 7

Bits

00 101

1 111 111

11

111 111 111

5

7 7

7

111

The FH880 Magnetic Drum Control Unit controls the flow of information
between the drum units and the Channel Synchroniser. It will accept 6-bit
output data characters from the synchronizer and distribute them to the
drum units as specified by the program. The Control Unit also transmits 6-bit
input data characters to the Channel Synchronizer. Transfers between drums
and core memory begin at the time the angular position of the drum coincides

CENFOR 16-23
Several errors are detected by the Magnetic Drum Subsystem:

Parity Error. Each data word is recorded with odd parity.
If even parity is detected during the read
operation, a parity error Interrupt occurs.

Character Count. Whenever fewer than six characters per word

are transferred to or from the drum, a character
count error interrupt takes place.

Illegal Function. Each operation requested of the drum sub-
system is checked for validity.

subsystem results in an invalid address interrupt.

CENFOR 16-24
16.17.2. FOLION

Drum files may be read or written sequentially in the same manner
as tape files. However, a maximum of 700,000 cells are allowed per
program. When a file is closed with a rewind, it may be reopened
and read or written from the beginning of the file area.

3. EX

Drum files may be read or written in either a sequential or random
manner. The programmer must specify exactly how many words to read
or write and where they are located. The programmer has complete
control and the responsibilities for blocking, item control, etc.
The EX subroutine merely delivers n number of words from a specified
relative location into a specified location.
The CALL line of the EX routine is:

CALL EX( function, unit , status, buff er, no. words, relative drum position
The most commonly used drum functions are:
02 - write drum
The unit assignments for drum are:

25 for drum table Dl vith length tag LD1

26 for drum table D2 with length tag LD2

27 for drum table D3 with length tag LD3

28 for drum table D4 with length tag LD4

29 for drum table D5 with length tag LD5
The status variable will contain the status code of the completed

function. It whould be checked after every CALL to the EX subroutine.
If the code is 0, there was normal completion.

The buffer is the area in core into which data will be read from drum
or from which data will be written into drum.

CENFOR 16-25

The number of words is the number of words to be transferred in

either direction. A block size of 256 words is near optimum in timing

for drum transfers.

The drum position (relative to position 0) is the position within

the drum table •where reading or writing will take place. For example,

if the drum position is 0, then the first position in the drum table is

the starting position of the transfer. If the drum position is 99, then

the starting position is the 100th word. The programmer must maintain

the variable which specifies the drum position. The EX subroutine does

not update the variable.

To read a series of 20 word groups from drum (unit 25) and write

them out using F0LI0N, the following could be coded:

DIMENSION NBUFF(20), NA(605)

coding to initialize FCLION tape etc.

NN=0

DO 50 J»l,10d

CALL EX (34,25,NSTAT,NBUFF,20,NN)

IF (NSTAT.NE.0) STOP ERROR

CALL ITKOUT (6HANYFIL,MBUFF)

50 NN=NN + 20

CENFOR 16-26

16.17. 4. SCHEDULE CARDS

If no drum is used, the FAC card should contain MD0/0. If drum
is used, the total number of drum cells required should be included
as MD0/xxxxxx. Also, a TAL card should be furnished using the
drum length tags and specifying the size of each area. For example.
,TAL, LD1/50000, LD2/l0«0

16.17.5. PRACTICAL USES CF THE DRUM

The drum may be used as a scratch pad: to store intermediate files
(to conserve tapes and time), to store tally matrices, to disperse
files (to eliminate the need for sorting short files), to have
to help in any other way the programmer can envision. In some
instances, master files are read in and stored on the drum for
unlimited access. Program segmentation is also feasible on the drum.
Random Access, Indexed Sequential
One example of drum use is:

It is desired to store information in the drum and to access
records in a random manner. At the time the record is stored,
a key and a relative location of drum storage can be placed
in a core table. This core table can be sorted, scanned, or
processed sequentially or randomly. When the desired key is
selected in core memory, then the relative drum location can
be placed in a variable before a call to EX. Information may
be stored into or read from selected areas in drum. This type
of operation should be performed with discretion because of
time factors. Too many references to small areas in drum
can slow down a program. It is best to use chunks of data in
the range of 256 words per reference.

CENFOR 16-27
Tally Matrices

One use of the drum is to store the matrices developed during
a program run. After the data for an area has been summarized
at the detail level, the matrix for that specific area can be
stored. When all matrices have been stored, it is a simple
matter to code a loop to read each matrix, to create cross totals,
subtotals and grand totals for all like matrices, and then to
produce tables. The same matrices may be used to prepare many
different tables depending upon specifications.

dispersal by Selection

The drum is ideal for dispersing a file into several smaller ones
based upon special criteria either before or after initial
processing. It often eliminates the necessity for a sort
especially if the data is a short file of less than 700,000
words. When there is room in core and when there is a need
for a sort, a selected drum area (which has been dispersed)
can be brought into core and sorted using the subroutine SORT.
The sorted data may then be sent back to drum and later merged
with other short drum files.

Parameters for Program Execution

A program technique is to load the drum with a long list of
parameters or selected data which will be tested in the program
to direct the sequence of operations, to furnish table
specifications, to furnish keys for operation, etc.

CENFOR 16-28

Master File Storage

When a master tape file of whatever nature (heading, stubs,
alphabetical description, codes, table formats, etc.) is
needed repeatedly throughout a run, it is definitely an
advantage to be able to store this file on drum and to
read it either senuentially or randomly as the need arises.
The EX routine can be used for this purpose.

Program Segmentation

It is possible to assemble several independent programs and to
call each one as needed into an overlay area for execution
under the control of a main segment. See SEGFOR 16.17.6.

December 1970 CENFOR 16-29

16.17.6. SEGFOR

DRUM OVERLAY SEGMENTATION OF FORTRAN CODED PROGRAMS
Bureau of the Census - Paul Friday

DRUM OVERLAY SEGMENTATION;

- A program may be written in self contained pieces or "segments".

- When this program is loaded into the machine, each of these segments
reside on drum rather than in core, and may be read into core one by
one for execution under control of the running program itself.

- Each segment, when called for, will be read into a common core area
for execution. This allows any number of segments (up to a maximum

of 9) while the core requirements for the overlay area are defined only
by the requirements of the largest segment.

- The segments are initially coded as free standing independent programs
and become part of a master segmentation program when they are loaded
into the machine. For this reason, each segment may be tested as an
independent program and then, with slight modification, be included as
part of the segmented program as a final step. Also, former sequences
of independent programs may be modified and defined as drum segments of
a single program. This is useful in eliminating intermediate tape
handling and operational errors.

CENFOR 16-30

Pictoral layout of a segmented program :

Program allocation
scheme in core:

Segments stored
on 880 drum:

- The above diagram applies to both IBANK and DBANK.

- Section "A" consists of the resident segment which is in core at all
times. Section "A" contains your resident Fortran coding plus any
library routines referenced in that section.

- Section "B" initially contains nothing. Section "B" is the area into
which the various drum segments will be read and then executed. Each
segment read into "B" consists of your Fortran coding for that segment
plus any library routines referenced from that segment th at were not
previously referenced in the resident section (see belowT m

Global and Local Library Routines:

- If any drum segment references a library routine (such as Folion) that
was also referenced in the resident coding, the reference will be to
the library routine allocated in the resident core slot. Thus, any
library routine referenced from the resident section will be known as
a global routine.

- If any drum segment references a library routine that was not referenced
in the resident coding, the routine will be allocated in each and every
segment that makes reference to it. Thus, any library routine not
referenced in the resident section but referenced in a drum segment (or
segments) will be known as a local routine.

CEMFOR 16-31

Coding of the segments :

Each segment in the program, including the resident segment, is coded
in the following format:

/././.* NAME

@ MAP NAME,NAMEB.

@LIP FOR NAME, NAME, NAMEB.

CALL SUB

SUBROUTINE SUB (\$,\$>M,M,M,\$)

(YOUR FORTRAN STATEMENTS ARE CODED HERE)
*

RETURN n (SEE FOLLOWING DISCUSSION OF RETURNS)

END

))))))

Note that additional segments are coded as separate files on the same
tape, each of which is equivalent to an independent program. Only the
start card of the last file should contain the REWINT entry in card
columns 73-78.

CENFQR 16-32

When the segmented program is initiated, the resident segment is given
control first.

Reading drum segments into core is controlled by the execution of RETURN
statements. The legal forms are RETURN and RETURN n (where n is coded
as an integer ranging from 1 to 9K

The RETURN n statement will cause the drum segment described by n to be
read into core (if it is not already there) and executed. The segment
previously residing in core is written back to its proper slot on the
drum. For example, execution of a RETURN 3 statement from any segment
in the program will read segment 3 into core (if it is not already there)
and execute it.

The RETURN statement executed from any segment in the program will
cause control to be transferred to the resident segment.

Each segment read in from drum is charged to the program as an I/O request.
In other words, shuttling between the segments is not free. Each segment
read from dru-n charges 8 u sec per word in the segment to the running
time of the program. Therefore, the program should be designed to avoid
excessive shuttling between the drum segments. However, if the segment
to be read from drum is already in core, no I/O action is required. For
example, shuttling between the resident segment and any one drum segment
over and over would require no drum action.

COMMON AREAS

- Any or all of the segments may contain blank COMMON statements.

- The area generated by these statements is truly common - that is, data
placed in blank COMMON by any segment is available for use in all other
segments containing similar blank COMMON statements.

- However, no matter where the blank COMMON statements occur, the COMMON
area is allocated in the resident segment core area and never becomes
part of any drum segment.

- Only blank COMMOM (never named COMMON) may be used in a segmented
program.

CEMFOR 16-33

A Further Discussion of Global and Local Library Routines

- The concept of global and local library routines must be considered when
setting up a segmented program.

- A global library routine is defined as one that is referenced from the
resident segment. If that same library routine is referenced from a drum
segment, the reference will be to the routine allocated in the resident
core area. For example, if a reference is made to Folion from the resident
segment (defining it as a global library routine), then any files opened

in any segment may be referenced from any other segment in the program.

- A local library routine is defined as cne that is referenced from a drum
segment or segments but not from the resident segment. In this case,

a separate copy of the library routine will be allocated in each drum
segment that makes reference to it. For example, if Folion is defined
as a local routine, files opened in any one drum segment may not be
referenced from any other segment in the program. However, the other
segments may maintain unique files on separate units.

- In order to allocate a library routine -in the resident segment (defining
it as a global routine), it is only necessary to make a reference or call
to it. It is not mandatory that referencing statement ever be executed.

- The following library routines, because of their design, may be allocated
in only one spot in the segmented program. This means that they may be
either locally defined in only one drum segment, or that they may be
globally defined. The routines are:

1) the double precision library package

2) Fortran formatted writes on units -2,-3f and +6

The double precision routine is referenced by writing a DOUBLE PRECISION
type statement. The Fortran formatted write routine is referenced by
formatted write statements involving one or more of the units described
above.

CENFOR 16-34

SCHEDULING

PTY CARD: The program name is SEGFOR. (The Fortran coded segments become
load time subroutines to the SEGFOR controlling program.)

FAC CARD: The IBANK requirement is:

The resident segment IBANK + the largest drum segment IBANK +

250, A (or 32? Q ). Note that the IBANK requirements for each
10 o

drum segment are not the same as shown on the Elf listing.

Any library routines located in the resident segment will be

global and therefore not allocated in drum segments which

reference them. Because of this, the core requirements for

each global routine must be subtracted from each drum segment

which references that global routine. For example, if Folion

were a globally defined routine, and a drum segment ■contains

Folion on its Elf listing, then the core requirements of Folion

must be subtracted from the drum segment requirements shown on

the Elf listing.

— The DBANK requirement is:

The resident segment DBANK + LN\$BLN + the largest drum segment

DBANK + 250., „ (or 372 Q ). LN\$BLN is a TAL card increment ex-
10 o

plained later. Note that the comments on drum segment IBANK

apply to the DBANK computations as well.

— The Drum requirements are:

ID1 + LD2 + LD3 + U)k + LD5 + sufficient drum to store IBANK
and DBANK of all drum segments. LD1 through LD5 are TAL card
increments explained later.

— Tape facilities are scheduled in the standard manner for Fortran
coded programs.

TAL CARD:

LN\$BLN

LD1

through

LD5

This entry is equal to the value which appears on the Elf
facility synopsis opposite "LN\$BLN". The entry on the TAL card
should be equal to the largest LN\$BLN on the Elf listings for
the segmented program.

These represent the standard Fortran drum table lengths, if used,
They correspond to Fortran internal unit numbers 25 through 29.

CENFOR 16-35

SUB CARD

50 is the formal name of the resident segment.

51 through S9 are the formal names of the first through the ninth drum
segments respectively.

To fill out a SUB card, you must equate the formal names of the segments
with the second name appearing on the MAP card of each segment. For example,
a program containing a resident and two drum segments would be scheduled
with a SUB card as follows:

JRTD,SUB,S^/NAM1,S1/NAM2,S2/NAM3,S^,S5,S6,S7,S8,S9.

Where NAM1, NAM2, and NAM3 are the second names on the MAP card of each
segment.

Note that the SUB card is the only point in the system where the elements
are formally defined a.z drum segments. Because of this, it is possible to
construct a tape containing any number of elements which could be used as
segments. Then, when the program is scheduled, the SUB card may describe
various configurations of the segmented program.

For example, your program tape could contain the following named elements
(2nd name on the MAP card):

NA,NB,NC,ND,NE,NF, and NG

Then, one possible configuration of the program defined at schedule time
might be:

JRID,SUB,S0/NA,Sl/NB,S2/NF,S3/ND,S4,S5,S6,S7,S8,S9.

And then, without recompilation, the program configuration could be redefined
simply by rescheduling with a different SUB card:

JRID,SUB,S^/NA,Sl/NG,S2/NC,S3,S4,S5,S6,S7,S8,S9.

CENFOR 16-36

TRIVIA

The coded example shown on page 3 may contain references to other internal
subroutines or other external subroutines contained within the SERVO
start and stop cards.

The "CALL SUB" statement is never actually executed when the element
becomes part of the segmented program. Howevor, it must be present for
the initial statement executed in the segment.

Note that the "CALL SUB" line could contain return statement number
arguments referring to coding following the "CALL SUB" statement. Although
this coding would never be executed when the element is part of a segmented
program, it would be executed if the element is tested as an -individual
program. By coding it this way, the same element may be tested either as
an independent program or as a segment of another program without recom-
pilation modifications.

Segmentation is valuable not only because it offers the ability to code
larger programs, but also because it allows the construction of a system
which can be varied by SUB card redefinitions at run time.

Segments may be added to an existing segmented program tape at any time
without touching the rest of the program. This allows the construction
of an open-ended system similar in concept to the SORT with its ability
to accept option coding subprograms .

Any requests to Special Services to compile a segmented program must
indicate that a "FORELF-ELF" compiling sequence is desired.

An initial typeout indicating the FORTRAN program's name (the main program
name is always SEGFOR) and version number is recommended since control is
more difficult with programs of this type.

CENFOR 16-37

- For practical purposes the number of program elements on a tare should be
less than 100. It is possible to design segments in such a way that
several may be considered main segments. Then, at load time one of the
main segments may be sleected along witn the other segments desired for

a run. Thus, similar but different programs may be executed depending
upon the need.

- The following information is contained in a word within SEGFOR:

HI - number of cells in the overlay segment
H2 - address of the current overlay segment less one
The location of this word may be found in a memory dump by adding the
of the IBANK, and 133 octal.

- The program elements reside in core storage as follows:

Main segment
SEGFOR
Overlay area

17. PROGRAM EXAMPLES

March 1970

CENFOR 17- 1

17.1. GENERAL

The sample programs which follow have been coded from training
problem specifications. The reader should note that there are
many ways to code for the solution of a problem. The examples
shown here are merely used as illustrations.

The control cards required for the assembly of a program are

not illustrated here. Refer to Chapter 12: "ASSEMBLY, CORRECTING,

AND DEBUGGING.

17.2. PAYROLL PROBLEM SPECIFICATIONS

The input reel for this problem is a IIIA in LION External Format
(Fieldata card images). The last record contains all 9's.

The output reel should contain a table showing for each employee
the following: employee number, name, hours worked this week,
number of overtime hours worked, gross pay, amount of overtime
pay, amount of withholding tax, retirement deductions, amount
deducted for health insurance premium, net pay, and pay period.
Appropriate headings should be on each output column. The payroll
will be computed for a week's work. The regular work week will
be 4-0 hours. Any hours worked above this will be considered
overtime hours. Retirement is 3% of gross for all employees.

The data fields are described as follows:

FIELD

DESCRIPTION

A
B
C
D

E

F
G

H
I

Employee number

Employee name

Regular hourly rate, 2 implied decimal places

Overtime hourly rate, 2 implied decimal places

Number of dependents, integer field.

The withholding tax is computed on the following

basis :

to 1 dependents, tax is 20% of gross

2 dependents, tax is 15% of gross

3 dependents, tax is 10% of gross
U dependents, tax is 5% of gross

5 or more dependents, no tax is withheld
Total number of hours worked, I implied decimal place
Health Insurance Option, integer:

means no insurance

1 means low option, \$1.75 per pay period

2 means high option, \$2.85 per pay period
Closing date of the pay period in form MO/DA/YR
Field I is not used.

1

1

2

3

4

5

6

7

8

9

1 |2|j|<|s

6

M 2 | 3 H 5 I 6

'I 2 ! 3 ! 4 ! 5 ! 6

•I 2 ! 3 ! 4 ! 5

6

'I 2 ! 3

4 5 6

12

3 4

5 I 6

1 1 2

3

4 I 5 I 6

1I2I3 U Is

6

'| 2 I 3 | 4 | 5 I 6

l/p

A

B

C

D

E

F

G

H

I

O/P

,

LANG.

riii

1 1 1 1 1

i 1 1 1 1

1 1 1 1

1 1 1

1 1 1 1

1

i 1 i

i i 1 i i i i

1 1 1 1 1 1

F

F

F F F F F F

CENFOR 17- 2 March 1970

17.2. PAYROLL PROBLEM SPECIFICATIONS (Continued)
Payroll Coding

DIMENSION TAX(6),H(2),B(3)
DATE TAX /.2,.2,.15,.1,.05,.0/
10 F0RMAT(A5,3A6,F4.2,F5.2,I2,F4.1,I1,A6,A2)
20 FORMAT (1H /,

A^OH NUMBER NAME NO. HOURS OV,
B^OH.TIME GROSS PAY OVER. PAY TAXES RET,
C^OHIREMENT INSUR. NET PAY PAY PERIOD//)
30 FORMAT (1X,A6,3A6,4X,F4.1,6X,F4.1,4X,3(F5.2,6X),
A F5.2,7X,F^.2,6X,F5.2,5X,A6,A2/)
IF (I.EQ.99) GO TO 999
WRITE (6,20)
Q=F-4-0.0

IF (O.LT.0.0) GO TO 35
Z=^0.0
GO TO 36

35 Q=0.0
Z=F

36 Q=D*Q
P=C*Z+Q

1=1+1

IF (I.GT.5) 1=6

R=TAX(I)-P

S=P*.03

IF (J-l) ,50,60

T=0.0

GO TO 70
50 T=1.75

GO TO 70
60 T=2.85
70 U=P-R-S-T

WRITE (6,30) A,B,F,D,P,Q,Q,R,S,T,U,H

GO TO 1
999 STOP

END

March 1970 CENFOR 17- 3

17 . 3 . PROBABILITY OF PURCHASING AN AUTOMOBILE

Prepare the following table :

PROBABILITY OF PURCHASING AN AUTOMOBILE WITHIN ONE YEAR BY CONDENSED
INCOME BY AGE OF HEAD OF HOUSEHOLD

PROBABILITY OF PURCHASE

Income Total .1 .2 .3 .4 .5 .6 .7 .8 .9 1.0 NA

Total

Under \$3000

\$3000-4999

\$5000-7499

\$7500-9999

\$10,000 & Over

NA

Number should be to nearest thousands

Repeat for Age of Head: Under 25

25-34
35-44
45-54
55-64
65 +
NA

Skip non- interview records; i.e., limit universe to records with a
code in Word 39, Character 1.

CENFOR 17- 4

March 1970

17.3. PROBABILITY OF PURCHASING AN AUTOMOBILE (Continued)

Necessary information can be found as follows:

DESCRIPTION

Word 9 Characters 1-2 AGE of Head of Household

(Single years from 15; NN for NA)

Word 9 Characters 5-6

INCOME

Code

01

UNDER \$1000

02

\$1000-1999

03

2000-2999

04

3000-3999

05

4000-4999

06

5000-5999

07

6000-7499

08

7500-9999

09

10000-14999

10

15000-24999

11

25000 and over

NN

NA

Word 28 Character 3

Word 26 Characters 1-6
Word 27 Character 1

26 27

AUTOMOBILE WITHIN 1 YEAR

Code

1

.1

2

.2

3

.3

4

.4

5

.5

6

.6

7

.7

8

.8

9

.9

A

1.0

N

NNA

WEIGHT

(Eacl

XXXXXX

X

similar to the society in general;
these weights, rather than 1 are
added within the table. There are
two assumed decimal places.)

March 1970

CENFOR 17-5

17.3 PROBABILITY OF PURCHASING AN AUTOMOBILE (Continued)

FORTRAN CODING -

DIMENSION NWS ( 640) ,NWDS( 640) ,NTABL( 20,11 ) ,
A ITEM(60),N25(7),NHDR(20),NAGE(2,10)
INTEGER TABL(13,7,8)
DATA NA,N25/05050, 0,25, 35, 45, 55,65,200/

DATA((NTAB1(

I,J),I=1,20),J=1,9) t

60H

1

PROBABILITY OF

,60H

2 PURCHASE

,60H

3

,60H

4

,60H

5INC0ME

TOTAL .1 .2 .3 .4 .5

,60H

6 .6 .7

.8 .9 1.0 NA

,60H

7

,60H

8

,60H

9T0TAL

,60H

1

,60H

2UNDER \$3000

,60H

3

,60H

4\$3000-4999

,60H

5

,60H

6\$ 5000-7499

,60H

7

,60H

8\$7500-9999

,60H

9

/

DATA((NTABL(I,J),I=1,20),J=10,11)

/60H

1\$ 10, 000 & OVER

,60H

2

,60H

3NA

,60H

4

/

DATA NAGE

/60H

1 TOTAL

UNDER 25 25-34 35-44 45-54

,60H

2 55-64

65+ NA

/

DATA NHDR

/60H

1 PROBABILITY

OF PURCHASING AN AUTOMOBILE WITHIN ONE YEAR BY

,60H

OF HOUSEHOLD

/

C PROGRAM PROCEDURES START HERE

CALL OPNIN (3HNAS, NWS, 640, 10, 0, 0, 0, 0, 0)
CALL OPNOUT (3H0UT, MWDS, 640, 20, 11, 0, 0, 0, 0)
DO 1 1-1,20
DO 1 J=l,ll

CENFOR 17- 6 March 1970

17.3. PROBABILITY OF PURCHASING AN AUTOMOBILE (Continued)

FORTRAN CODING (Continued)

1 NTABL(I,J)=LFX(NTABL(I,J)
DO 10 1=1,20
NHDR(I)=LFX(NHDR(I))
10 NAGE(l,l)=LFX(NAGE(l,l))
CALL INSERT (31,NHDR,l)
CALL ITMOUT (3H0UT,NHDR)
CALL ITMOUT (3H0UT,NTABL(l,2) )
CALL ITMOUT (3H0UT,NTABL(l,2) )
11 CALL ITMIN(3HNAS, ITEM, N, \$999)
C CHECK TO SEE IF THERE WAS AN INTERVIEW

IF (JRS(ITEM(39),1).NE.3) GO TO 11
C
C RECODE AGE

IF (JRT(ITEM(9),1).EQ.NA) GO TO 20

KAGE=LXB( JRT(ITEM(9) ,1) )
DO 1\$ K=2,7
IF (KAGE-N25(K))21, ,
15 CONTINUE
GO TO 21

20 K=8
C

C RECODE INCOMES

21 IF (JNT(ITEM(9),3).EQ.NA) GO TO 30
INC=LXB(JNT(ITEM(9),3))

GO TO (22, 22, 22, 23, 23, 24, 24, 25, 26, 26, 26), INC

22 J=2

GO TO 31

23 J=3

GO TO 31

24 J=4

GO TO 31

25 J=5

GO TO 31

26 J=6

GO TO 31

30 J=7
C

C RECODE PROBABILITY

31 NPR0B=JRS(ITEM(28),3)

IF (NPROB.EQ.20) GO TO 32
IF (NPROB.EQ.40) GO TO 33
I=NPR0B-1
GO TO ^0

32 1=12

GO TO 40

33 1=13

March 1970 CENFOR 17- 7

17.3. PROBABILITY OF PURCHASING AN AUTOMOBILE (Continued)

C GET WEIGHTS

40 NCUM=LXB(ITEM(26))

NCUM=NCUM*10+LXB( JRS(ITEM(27) ,1) )

TABL(l,J,K)=TABL(l,J,K)+NCUM

GO TO 11
C

C AT END OF FILE, COMPUTE TOTALS
999 DO 51 K=2,8

DO 50 J=2,7

DO 50 1=2,13

50 TABL(1,J,K)=TABL(I,1,K)+TABL(I,J,K)
DO 51 J=2,7

DO 51 1=1,13

51 TABL(I,1,K)=TABL(I,1,K)+TABL(I,J,K)
DO 60 K=2,8

DO 60.1=1,91
60 TABL(l,l,l)=TABL(l,l,l)+TABL(l,l,K)

DO 70 1=1,728
70 TABL(l,l,l)=LBX((TABL(l,l,l)+50000)/l00000 ,0)
C ABOVE ROUNDS AND DIVIDES BI 1000.00
C PREPARE THE OUTPUT TABLE

DO 100 K=l,8

NTABL(1,2)=NAGE(1,K)

NTABL(2,2)=NAGE(2,K)

DO 62 NK=1,4

62 CALL ITM0UT(3H0UT,NTABL(1,NK))
C

DO 64- J=l,7
DO 63 1=1,13

63 NTABL(I+3,J+4)=TABL(I,J,K)
6^ CALL ITM0UT(3H0UT,NTABL(l,J+4))

100 CONTINUE

CALL IENFIL(3HNAS)
CALL 0ENFIL(3H0UT)
END

CENFOR 17- 8 March 1970

17.4. SORT WITH OPTION CODING

FILE DESCRIPTION :

Input: Size - variable length records; largest is 80 words
Language - all in BCD-XS3

Ilia tape, written with FOLION and buffer of 64.O (605-LION)
words
Format - see attached record description

Output: Sort output is to be blanked

I la output 1 — print on off-line printer, board 3, loop 3,

paper 14-3-1
Ila output 2 — (same as above)

GENERAL DESCRIPTION :

Type out: TRAINING SORT PROGRAM

List: B-C Type Units; bypass all others. (Type B-C is
determined by REC TYPE = 3, and SAMPLE = 1

Sort by: PSU, SERIAL, and SEGMENT as follows:

Output 1 : Vacant, Year-round Housing Units
Year-round = 1 in "Seasonal Status"
Housing Units = 1 through 7 in "Type Qtrs"
Create internal label - Vacant Units Sorted : external label - Vacant

PSU SERIAL SEGMENT TYPE-QTRS VAC. STAT SEAS. STAT

Output 2 : All other units (not vacant and/or not
year-around and/or not housing units)

Create internal label - Not Vacant Units Sorted : external
label - Not Vac

PSU SERIAL SEGMENT TYPE-QTRS VAC STAT SEAS STAT USUAL OCC COND

March 1970

CENFOR 17- 9

17. 4-. SORT WITH OPTION CODING (Continued)
INPUT RECORD OF FIRST PASS

WORD DIGIT(S)

1

1

1

3

1

4,5,6

2

1,2,3,4

5

1,2,3

7

1,2

8

2,3

48

3

48

4

48

5

DESCRIPTION

Record Type

Sample

PSU

Serial

Segment

Vacancy Status

Type QTRS.

Seas. Status

Usual occ.

COND.

49-80 Other Information

Accept "3", reject all others
Accept "1", reject all others
Major sort key
Intermediate sort key
Minor sort key
If vacant, codes "01,02,03"
If housing unit "01-07"
If year round, code "1"
Display code if NOT VAC file
Display code if NOT VAC file

OUTPUT RECORD OF FIRST PASS

All fields are right aligned with ignore fill to the left.
WORD

1

Record Type

2

Sample

3

PSU

4

Serial

5

Segment

6

Vacancy Status

7

Type Quarters

8

Seas. Status

9

Usual occ.

10

Condition

Accept 01-03 as vacant
Accept 01-07 as Housing Unit
Accept 1 as year round
Display code if NOT VAC
Display code if NOT VAC

CENFOR 17-10 M^ 011 197 °

17.4. SORT WITH OPTION CODING (Continued)

FIRST PASS CODING FOR SORT PROBLEM

EXTERNAL FPS
1 CALL OCSUB (|1,\$1,FPS)
SUBROUTINE FPS (\$,\$,\$)

COMMON NENTRY,ITMSIZ,ITEM(80) ,NEA(U) ,NTEM(lO)
DATA NEA/l, -13, 1,3, 4, -51, 3, -71, 2, -82, 2,-4.83, 31,0/
IF (NENTRY) 20,20,30
20 RETURN 1

30 IF (K.EQ.O) CALL TYPE (21,21HTRAINING SORT PROGRAM)
K=l

IF (JRS(ITEM(1),1).NE.6) RETURN 1
IF (JRS(ITEM(1),3).NE.4-) RETURN 1
CALL UNPK (ITEM,NEA,NTEM)
DO 31 J=l,10

31 ITEM(J)=NTEM(J)
ITMSIZ=10
RETURN 3

END

March 1970 CENFOR 17-11

17. 4-. SORT WITH OPTION CODING (Continued)
LAST PASS CODING FOR SORT PROBLEM

EXTERNAL LPS
1 CALL OCSUB (\$1,\$1,LPS)

SUBROUTINE LPS (\$,\$,\$)

COMMON NENTRY,ITMSIZ,ITEM(80),NEA(l3),NTEM(20)
1 LABA(5) ,IABB( 5) ,NBA(155) ,NBB(155) ,NL(20) ,NEB(20)

DATA N1,N2,N3,N7 /Q304,Q305, 0306,0312/

DATA LABA /5,6H VACANT, 0,0,0/

DATA LABB /5,10HN0T VACANT, 0,0/

DATA NEB/-H, 3, -31,4-, -4.6, 3, -63, 2, -82, 2, -96,1,
A-115, 1,-132, 1,4*0/

DATA NL /
A42H PSU SERIAL SEGMENT TYPE-QTRS ,

B42HVAC STAT SEAS STAT USUAL OCC COND ,

C36H /

IF (NENTRY) 10,20,30
10 RETURN 1
20 CALL OENFIL (4H0UTA)

CALL OENFIL (4H0UTB)

RETURN 1

30 IF (N.NE.O) GO TO 32
LABA(2)=LFX(LABA(2))
LABB(2)=LFX(LABB(2))
LABB(3)=LFX(LABB(3))
DO 31 J=l,20

31 NL(J)=LFX(NL(J))
CALL INSERT (31,NL,l)

CALL OPNOUT(4HOUTA,NBA,155,20,l,0,LABA,0,0)

CALL OPNOUT(4HOUTB,NBB,155,20,2,0,LABB,0,0)

CALL ITM0UT(4Ji0UTB,NL)

NL(11)=0

NL(12)=0

NL(13)=0

CALL ITM0UT(4-H0UTA,NL)

N=l

32 IF (ITEM(6).EQ.N1.0R.ITEM(6).EQ.N2.0R.
A ITEM(6).EQ.N3) GO TO ^0

33 CALL PACK (ITEM, NEB, NTEM)
CALL ITM0UT(4H0UTB,NTEM)
RETURN 3

40 IF (ITEM(8).NE.4) GO TO 33

IF (ITEM(7).LT.N1.0R.ITEM(7).GT.N7)
A GO TO 33
CALL PACK (ITEM, NEB, NTEM)
NTEM(11)=0
NTEM(13)=0

CALL ITMOUT (4H0UTA,NTEM)
RETURN 3
END

CENFOR 17-12 March 1970

17 . 5 . SPECIFICATIONS FOR MARRIAGE TABLE 7A

1. INPUT FILE: 89,171 27-word records

"=67 SEO EDITED-MARITAL"
IIIA Tape

2. ALL field values are in XS3.

3. First marriage date is recorded in field no. 7 for persons
married more than once, and in field no. 5 for persons
married only once.

4-. Tally using weight in field 9. Weight is 6 digits with 2
implied decimals.

5. Output tables should show tally rounded to thousands.

6. Provide table title, stubs and captions as shown except for
numbers 1-15 in left-hand margin of stub.

7. "TOTAL" for races includes "OTHER".

8. Survey date is 1967.

9. Tables should include only 1^-69 year olds.

March 1970

CENFOR 17-13

17.5- SPECIFICATIONS FOR MARRIAGE TABLE 7A (Continued)

10. INPUT FIELD LOCATIONS:

FIELD WORD DIGIT

UNIVERSE

DESCRIPTION

CODES

1 3 3-4

14-69 years

AGE

00-99

2 3 5

14+

MARITAL STATUS
MARRIED:

4

4

6 14+

11

1 14+

4-5 EVER MARRIED
14+
(0-5 in MARITAL STATUS)

6 EVER MARRIED
14+

5-6 MARRIED

MORE THAN ONCE

1 MARRIED

MORE THAN ONCE

1-6 14+

Spouse Present

Absent (Armed Forces) 1
Absent (Other) 2

WIDOWED:

3

DIVORCED:

Divorced

Separated

4
5

NEVER MARRIED

6

RACE

WHITE
NEGRO
OTHER

1
2

SEX

MALE
FEMALE

1

YEAR OF MOST RECENT
MARRIAGE

OO-99A

TIMES MARRIED:

Once

Twice 1

Three + 2

YEAR OF FIRST MARRIAGE 00-99^

CAUSE OF END OF FIRST
MARRIAGE :

Death of Spouse
Divorce 1

Other 2

PERSON'S WEIGHT

/l Anything above 67 is in 1800' s

;enfor 17-14.

March 1970

a

H Pi

en

ra

a

E-t CO

Fh

bO
CD

^5

H

CT}

-p

EH

Fh

Cm

CO

crt

■P
crt
CD

1

CD
-P
•H

H
nj

•P

FH

Fh
O
«H

CO

crt
crt

CD
ft
CD

S ■*

rH

cd
•p

r-i

CD
b0
cd
•H

in

Fh

3
•p

CO

•H
C-l

11

a

•H

CO

CO

Fi

crt
CD
M

20 and
over

H
1

O
H

Less than
10

Total
ever
married

c

p

CD
n
Q
pJ
O

CO

O H

-P •

O O

O CO CO

rH Ch

CO m CD

rQ

•H rH

CD

Ti Cm crt

rX) a

fl S

•H

crt -p CD

Cm rH

crt cm

O

r.

CD

to U

,3 r a

- bD O

O -P

O crt cm

crt

•

-N

O C H CD

CO

a

M 2

1 — 1 CO

O ,£

co en

CD

CD

cm B-t

cm Fh

bO

bO

crt

crt

crt

CO

CD •

•H

•H

CD

CD •

CD >s P

Fh

Fh

bD

bD (D

£ O

s

H

S

crt bD

•H rH >

E3

1

-P crt

HN O

€

,£

a -H

CD

O

0> Fh

crt O M

+3

+3

bD

O H

-P O

CO

CO

crt

-P

m crt

ffl

•• Fh

Fh

•H

ft ••

CD S

t> vftX)

Fh -h

•H

U

CD O

s

ft

crt H 0.'

O <+-!

Cm

H

O -P

-p

,cj

«m

2

M

H

H

en

H T*

-P

P

S

CD CD

g

crt

H

rH O fi

^ crt

crt

bD

O

•H

rH Ch crt

—I

-p

•» crt

PQ

•H

cm

•H

Crt 13

TH

CO

M .H

M

-P

^3 ~

-P rH

H

H

i-l H

Pi

H

hJ

q t>

O O

C

•H

aS ^

EH

CD

crt

CO -H CV

EH

Cm

g |

CO

b»

CD H

CO

CO

H

CD

rH O

CO Fh

Fh

4J

co ■"*

Q

bO bD

crj H -P

crt crt

crt

crt

crt -p

fl crt

£ Crt

CD

CD

CO

EH

•H

-P CV

CD >j

>>

Fh

a

u

u

r^-n

^ S

Fh O CV

S

CD

led

CD

w

b

O -P

crt H

L>

>

CT^

...h-

t>

£i

r w

CO CJ

CV

O

CO

r-i

c\i

O

Pi

CO CO

CD CD

+>

&q

CD

- ^1 M

•v

O

H

pq

-. crt

O

H

ft

-• Fh

H -P crt

-P -P

•P

O

jj

-P

-p

Q

+3 -H

crt -H

crt

crt co

crt H

-P rH H

CD -^fCV -00

a) cd

■shO

U"N

CD

O H H

ftH

O.I

CM

ft bDrH

OJ

r\?

ftCM

Eh -H crt

CD

cd crt

CD O

e: Js g

Pi

Pi

Pi

s

CD

CD

CD

CD

CD

CD

CD

bD

CD

bD

CD bD

CD

bD

CD bfl

bD

1 ^~\

bD

crt

bD

crt

bD crt

bD

crt

bD crt

bD crt

JS

crt

•H

crt

•H

crt -H

crt

•H

crt «H

crt -H

> CD

•H
!h
H

H

•H
in

H

H

crt

•H M
H H

P crt

•H

H
r -H

Ch

•H Fh
F-> Fh

Ih crt

•H Fh
U Fh

Fh crt

' CO

-P

-P
02

-P

-P

CO

i S
^ -P

-P CO

CO

+3

-P

CO

-P

-P CO

" -p

HP CO

'< ch

CO

f-'

CO

Fh

CO H

F|

CO

H

CO Fh

co Fh

>

H

•H

•H
Cm

H
•H

•H
ch

H «H

•H ch

•H

Fh
•H

•H
Ch

Fh -H

•H Ch

Fh -H
•H c M

> 0)

ch

c.

ch

h

ch
Fh

CD

<H

Fh

ch
Fh

Cm

Fh

> •H

!h

CD

u

CD

Fh cd

Fh

m

CD

Fh CD

Fh

-P

0)

-P

-P

ch

CD

p

-P

ch

CD +3

-P ch

O

-P

•P
ch

CD -P
-P ch

P
-P r -H

! -p

CD

ch

crt

ch

crt

ch crt

ch

crt

e H crt

ch crt

CD crt

O

crt

crt

crt

Fh

crj

crj

crt

r —

O--X

•H

■•d

T3

rrj

T5

Ti

Trt TJ

13

crj

fl

Ti

^-OTi

TS

fD

Tf a -1

Ti

r— (

ffl TiTi CD

CD

Ti

+-'

O Tj

TJ

CD

_p

CD

CD

CJ

03

CD

O

CJ

CD O

<TN

CD

CD

O

fD

O

C

CD

ni

O

•H

^

fn

£

S

H

Fh

S M

•H

&

Fh

^3

!3 Fh

H

£ Fh

E-

03 -H

^

H

nd

H

O

Q

O

O

O

O O

TJ

Fh

O

O

O

O O

O

0) H

n

O

11

?H

■■a

!> rcJ

T3

>

t>

t? >

CD

S

•n

> Tj T3 >

>

Tj !>

•H H

Tl!

!>

•H

crt

•H

•H

•H

.—1

•H

•H

•H -H

•H

crt

— 1

•H

•H

•H >H

>H

-H -H

H Crt

•H

•H

H

js

^3 ft

J2

ft

O 5 . . !

H 3!

\3. C '

^

S g

^2

Q

H

H

crt

M

O

H

r\? C>

•<h i^\

S H

C\2

CT\

S

-<J-UTv

vO

O

to O

rH

H

,-i H

H H

18. FORTRAN V

February 1971 CENFOR 18-1

FORTRAN V

A number of features not found in FORTRAN IV have been included
in FORTRAN V for ase with EXEC 8 on the UNIVAC 1108. This chapter
is devoted to these new features. Programmers should refer to the
Programmers Reference Manual UP - 4,144 for EXEC 8 components and
concepts with which the FORTRAN V programmer should be familiar.
A Census processor "FORT45" is available to translate a FORTRAN IV
program into a FORTRAN V program which can be executed under EXEC 8.
For information about EXEC 8 SORT/MERGE programs refer to the
manual UP - 7621 and to the write-up "FORTRAN SORT LINKAGES".

In order to assemble a FORTRAN V program, there are various options
associated with the EXEC 8 Processor Call Statement "FOR":

A. Accept the results of processing despite detected errors.

I. Insert. Introduce new source language elemsnt into Program
File from the control stream.

L. Produce a complete printer listing.

N. Listing of only summary information.

S. Source code (and diagnostic message, if any) printout.

U. Update, produce new cycle of source language element.

W. List correction lines if corrections are applied.

X. Abort the Run if the Processor detects source language or
compiler errors.

Note : The absence of a specific option related to printer output
is treated as though the "N" option had been specified.

18.1. INCLUDE

The general form of the INCLUDE statement is

INCLUDE n, LIST

where n is the name of a PROC created by the Procedure Definition
Processor. When "LIST" is used, the included statements will be
listed whenever the source program is listed. The PDP element
that contains the PROC must be in a file that is assigned to
the run in which the compilation is being performed.

A normal use of this statement is the inclusion of the same
specification, internal subroutines or DEFINE procedures in
several programs.

CENPOR 18- 2 February 1971

18.2. DELETE

This statement provides a means to prevent the generation
of object code following its appearance. The general forms
of the DELETE are:

DELETE n

or

DELETE n, L

where n is a statemsnt number where the generation of object
code resumes. L is an integer constant or a PARAMETER variable
with the value of or 1. If L is 0, the statement is ignored;
otherwise, it is executed as in the case of DELETE n.

18.3. EDIT

The EDIT statement allows the user to override the listing
options on the "FOR" processor control card and to select the
type of compilation listing produced for any portions of the
source program. The word SOURCE refers to the source program
statements and the word CODE refers to the octal and mnemoric
representations of the generated code. The forms are:

1. STOP EDIT SOURCE

This form terminates both source and octal code listings.

2. START EDIT CODE

This form initiates both source and octal code listings.

3. STOP EDIT CODE

This form terminates octal code listing only.

4. START EDIT SOURCE

This form initiates source code only.

18.4. INPUT - OUTPUT END CLAUSE

FORTRAN V formatted read and write statements are the same as
those of FORTRAN IV with the option of two new features - "END"
and "ERR". The optional END Clause permits the programmer
to retain control instead of terminating when an end of file
is encountered.

February 1971

CENFOR 18- 3

18.5. INPUT - OUTPUT ERR CLAUSE

An ERR clause in a READ or WRITE statement suppresses
program termination and allows retention of control when
an error is encountered during execution of the statement.
This is an optional clause. Forms for READ and WRITE
statements are :

(1

(2

(3

U

(5

(6

(7

(8

(9

(10

(11

(12

(13

WRITE (unit, 3) list

READ (unit,z, ERR * 1 1 , END = 1 2 ) list

READ INPUT TAPE unit, f, list

WRITE (unit,z, ERR = 1-^ END = 1 2 ) list

WRITE OUTPUT TAPE unit, f, list

PRINT f, list

PUNCH f , list

READ (unit, ERR = li, END = 1 2 ) list

WRITE (unit, ERR = 1-^ END = 1 2 ) list

WRITE TAPE unit, list

The various items used in forming the above statements are
defined as follows:

unit - the logical unit involved

z - the format reference or a namelist name. If
z is a namelist name, then the list of the
statement must be void. (Refer to 18.18.)

list - an ordered list of variables, the contents
of which are to be transmitted.

ERR = 1 - is an optional clause used to transfer control
to statement label 1 which should be contained
in the same routine as the input-output statement,

CENFDR 18- 4

February 1971

END - 1 - is an optional clause used to transfer control
to statement label 1 when an end of file is
encountered on input or the end of a mass
storage file on output.

18.6. INPUT/OUTPUT STATUS WORD INSTAT FUNCTION

The content of the status word as set by a FORTRAN I/O statement
may be retrieved for examination with the function INSTAT.

The status word has the following format:

r

Code
35 - 30

Error
28

18

Location
17 o

Code is expressed as an absolute integer. ERROR is either an
integer or two left justified characters.

LOCATION is a program relative address. Codes and their
meanings are listed on the following table.

February 1971

CENFOR 18- 5

Contents of the In put /Out put Status Word

CODE
(decimal)

ERROR

LOCATION

REMARKS

Format character/
internal type

Location
variable

of

Internal type ana format
type are incompatible

1

Error character

Location
format

of

Illegal format character

2

Maximum record
length

Location
record

of

Maximum record length
exceeded

3

Input/output ambiguity
(possible hardware error)

A

Error character

Location
record

of

Illegal octal input

5

Location
record

of

Illegal integer input

6

Number of digits

Location
record

of

Top many digits in
integer inout

7

Location

of

Input exponent too

10

11

12
13
14
15

Error character

Relative position
of variable name

Error character

Relative position
of variable name

record

Location of
record

Location of
table

Location of
table

Location of
table

Location of
record

Location of
record

Location of
record

Location of
record

large

Illegal character in
input

Not namelist table

Illegal variable type

File ended in namelist
record

Illegal character in
namelist

Namelist input exponent
too large

Namelist input exponent
error

statement differs from
that of inout record

CENPOR 18- 6 February 1971

18.7. ERROR WALK BACK

An error occurring at any point in a subprogram causes a
walk back to the main program. A message is printed at each
subprogram level stating the name of the referencing subprogram,
the sequence number of the reference, and the name of the
subprogram referenced.

18.8. EXTERNAL SUBPROGRAM

An external subprogram may be written in FORTRAN V or in
UNIVAC 1108 assembly Language. An external subprogram may
be referenced from any part in the entire program. An actual
argument may be an expression, an array, a subprogram name,
or a statement number (preceded by \$).

A FORTRAN element may also reference a COBOL subprogram by
using the "CALL COBOL (entry name)" statement. Common working
storage must be provided for creating or testing variables.
The entry name used must be declared EXTERNAL.

A COBOL program may also call a FORTRAN subprogram by using
the following statement:

"ENTER FORTRAN name SUBROUTINE REFERENCING variable i ,

variable n "

Refer to UNIVAC 1106/1108 COBOL (UP-7626 rev.2).

18.9. MULTIPLE ENTRY POINTS

A provision is made for multiple entry points to a subprogram.
These entry points may have their own names and argument
lists including return arguments to specified statement numbers.
The number and types of arguments are completely independent
for each entry point; however, individual arguments set by
one reference remain set for the entire subprogram until new
arguments are supplied. Thus one entry could possibly
initialize the sets, and other entries could provide those
arguments which vary. The form of the ENTRY statement is:

ENTRY name (a^, &2> ••••» a n )

where name is the symbolic name of the entry point and can be
considered an additional name of the subprogram, and a-j_ are the
formal arguments.

References to an entry are made as to any subprogram. Functions
return values and subroutines are called as usual. Example of
a function reference :

A = name (a^, a£, ...., a n )

1

February 1971 CENFOR 18- 7

Example of a subroutine call:

CALL name (a]_, ao, HI, a n )

Within the body of a subprogram, control flow ignores ENTRY
statements .

The following example illustrates the use and advantages
of multiple entry points. Initialization is done once with
the first reference. Thereafter, the function is entered
through an optional entry point.

C AN EXCERPT FROM A REFERENCING PROGRAM

V(l) = SCALAR (l,l,AA,BB,IT,KK,NN,1.0E-3,\$5,\$6)
Do U KK = 2,NN
ly V (KK) = FAST (1,KK)
GO TO 7

5 STOP 5

6 STOP 6

7 CONTINUE

C A SUBPROGRAM WITH ENTRY POINT FAST
C

FUNCTION SCALAR (l,K,A,B,IMAX,N,TEST,\$,|)

DIMENSION A(IMAX,KMAX),B(KMAX,IMAX)

IF (N.GT.IMAX,OR.N.GT.KMAX,OR.N.LT.l) RETURN 9

DO 1 J=1,N

IF (ABS(A(N,N)).LT.TEST.OR.ABS(B(N,N)).LT.TEST)RETURN 10

1 CONTINUE

ENTRY FAST (I,K)
SCALAR = 0.
DO 2 J = 1,N

2 SCALAR = SCALAR + A(J,N)*B(N,K)
RETURN

18.10. AUTOMATIC TYPING

For the intrinsic function (ABS, MOD, MAX, MIN, DIM, and SIGN)
and for the mathematical library functions (SIN, COS, TAN, ASIN,
ACOS, ATAN, ATAN2, SINH, COSH, TANH, EXP, LOG, L0G10, SQRT,
and CBRT), the type of the function is determined by the type
of the arguments. If arguments of differing type are used, they
are combined according to the rules of mixed - type expressions
and the function value is of the resulting type. Automatic
typing also takes place when these functions are referenced
by the alternate library names for specific type (for instance,
the alternate library names for SIN are DSIN and CSIN) unless the
compiler statement option (MATH = A) is used. This option
inhibits automatic typing of the alternate names for mathematical
library functions. If the name of a library function is passed
as an argument, the type of the accessed function is determined
by the type of the access function defined by name.

CENFOR 18- 8

February 1971

18.11. FLD FUNCTION and Bit Manipulation

The FLD intrinsic function extracts from or inserts into
a 36 - bit string, any size byte specified. The typeless
functions AND, OR, XOR, BOOL and COMPL manipulate bit strings.
The form of the FLD reference is :

FLD (i, k, e)

where i is the beginning bit (left most bit of a word is
bit 0) k is the number of bits (the width) and e is an expression
of any type. The FLD function may be used in any arithmetic
or relational expressions. The content of the byte extracted
from the string is right adjusted in the arithmetic register and
the remaining bits of the register are set to 0. The result
is considered to be an integer value. The FLD function may
appear to the left of the equals sign in an arithmetic expression.
In this case, if the expression to the right is not integer, it
is converted to integer. The right most bits of the value
of the expression are inserted in the byte of the FLD's third
argument as specified by the first and second arguments. The
remainder of the word is not disturbed. Since the overall
content of the third argument is changed, it must not be a
constant, a PARAMETER valuable or an expression if the FLD
function appears to the left of an equals sign. Examples of
the FLD function:

Stat emen t
Nl = FLD (35, 1, 15)
N2 =-FLD (33, 2, 15)
N3 = FLD (33, 1, 15) + FLD (34,2,15)
H = FLD (35, 1, -1)
N5 = FLD (34, 2, -1)
N6 = FLD (1, 35, COMPL (0))
A = FLD (1, 4, -1)

Final Value
Nl = 1
N2 = - 3
N3 = 1 + 3 = 4
N4 =
N5 = 2

N6 = 2** 35 -l
A = 15.0

(the integer result of FLD is converted to real)

Initial Value of N

-4

pQrstu

1

FLD statement

FLD (34, 2, N)

FLD (34, 2, N) = 2.0

FLD (18, 6, N) = ABCDEF'

Final value
N = 2
N = -1
N = PQRFTU

FLD (0, 18, g) = FLD (0,18, Z) 1 (no change)

February 1^71 CENFOR 18- 9

Specified COMPILER statements may be requested to control the
FLD interpretation and the generated code:

(FLD = r) specifies that bits are to be counted from right
to left starting with bit 0.

(FLD = L) specifies counting from left to right

(FLD = Q) causes the compiler to generate optimized code for
FLD references when the field specified is one of four quarter-
words if the installation has set the quarter-word ability.

(FLD = T) causes optimized code for the three third-words if
the FLD function is specified to the left of the equals sign
and quarter-mode ability is present.

In summary, the FLD function permits the extraction of bits from
a word and/or the insertion of bits into a specified portion of
a word.

18.12. DEFINE

A Define procedure is referenced like a function with arguments.
It must appear before any executable statements. In line code
is generated with each reference. The form of the DEFINE
procedure is:

DEFINE name (a]_, a P ,...., a n ) = expression

It is permissible to omit the word DEFINE if desired.
Subscripting of subscripts is, in effect, permitted to any level
through use of the DEFINE statement. For example:

DIMENSION B (100), I (100)

DEFINE BB (K) = B (K)

X = BB (I(J))
An example of a prodecure reference is:

DEFINE F (X, Y) = X + Y

A = F (U * V, V)
and the result is A = U * V + V

18.13. MIXED TYPE ARITHMETIC

Integer, real, double precision, complex and typeless expressions
may be combined by the arithmetic operators including
exponentiation. The only exception is that complex and double
precision expressions must not be mixed with each other or

CENPOR 18-10

February 1971

with typeless expressions. Conversion takes place when the
type of the expression differs from the type of the receiving
variable. Arithmetic expressions of differing types may also
be compared in relational expressions.

18.14. 1108 DOUBLE PRECISION HARDWARE

The UNIVAC 1108 hardware allows efficient double precision
arithmetic with a resolution to 18 decimal digits. The 1108
double-precision format contains an 11 bit characteristic
biased by 1024 (2000g). The mantissa is composed of 60 bits
extending into the second word.

S ! characteristic

i
71 ! 70 60

Mantissa
59

36

35

Mantissa

18.15. PARAMETER VARIABLES

PARAMETER variables may be defined by expressions. A PARAMETER
variable may not be redefined but it may be used in the
definition of subsequent PARAMETER variables. For example:

PARAMETER J = 1, ALPHA = U - J, K2 = ALPHA,

A K8 = 2 -"-- K2,

B K4 = (K8 - 5) /2 + K2/2 + 2

Following the PARAMETER statement, the use of J is equivalent
to using the integer constant 1, and using 3 for ALPHA, 3 for
K2, 8 for K8, and 4 for K4.

18.16. DATA IN TYPE AND DIMENSION STATEMENTS

It is now possible to include data with type and DIMENSION
statements as well as in the DATA statement. However, implied
DO loops are not allowed for type and DIMENSION statements.
The following examples illustrate the different ways of
including data:

Example 1: DIMENSION R (7)

DATA A, R /1.5, 7 * 3.5/
Example 2: REAL A/l.5/ R (7)/7 * 3.5/
Example 3: DIMENSION A (l)/l.5/R (7)/7 * 3.5/

February 1971 CENFOR 18-11

Example k' PARAMETER P -- 3

INTEGER X/4A (P, A), Z (P, 4,)/9, 2 * 5,

P * 6/22

As a result of the above:

X = u

2 (1, 1) = 9

2 (2, 1) = 5

2 (3, 1) - 5

2 (1, 2) = 6

2 (2, 2) = 6

2 (3, 2) = 6

Y and 22 are unde fined

Two COMPILER statements are available for DATA statement
specifications :

(DATA = SHORT) allows the number of constants to be fewer
than the size of an array when the list
is unsubscripted.

For example, without the option, the following would result in a
diagnostic "The list in the above statement is too long."

DIMENSION A (10)

DATA A. / 1., 2., 3. /

(DATA = IBM) allows the insertion of more than 1 word of
data into a DATA array when a subscripted reference is made.
For example, without this option, the following usually results
in a diagnostic:

DATA A (3) / 1, 3, 3 /

However with the DATA = IBM option, the action is to set 1
in A (3), 2 in A (4), 3 in A (5).

18.17. IMPLICIT

The IMPLICIT statement is used to specify that names starting
with a certain letter are of a specified type. The IMPLICIT

CENFOR 18-12 February 1971

statement overrides the name rule (where names I - N are typed
integer and all other real) but is overruled by an explicit
type statement.

The IMPLICIT statement may appear any place in a FORTRAN V
program. The type associated with a letter is in effect until
it is redefined by a following IMPLICIT statement. Once the
type of a name is set, it cannot be changed. Local - global rules
are followed for symbolic names.

The form of the IMPLICIT statement is:

IMPLICIT type (an, as>, ....)> type (a^, a/,...)
where a represents single alphabetic characters or a range
of characters denoted by the first and last letters in the
range separated by a hyphen. The letters are then associated
with the type that precedes the parentheses. For example:

IMPLICIT INTEGER (A, X - Z), REAL (M) INTEGER M2 declares
that names beginning with A, X, Y, 3 are integer and that
names beginning with M (except for M2) are real. The explicit
typing may be used to define specific names. FORTRAN V allows
for additional form for double precision typing. It is:

REAL * 8 namej, name2>

18.18. NAMELIST INPUT/OUTPUT

A list of subscripted or unsubscripted variables or arrays
may be specified in a NAMELIST statement. When the name of
this list appears in a READ or WRITE statement, the entire
list of variables may be transmitted. Since no format is
specified, standard editing codes are used depending on the
type of the list elements. Input - output statements take the
form:

READ (unit, X, ERR = ± 1 , END = lp)

WRITE (unit, X, ERR = 1 ± , END = 1 2 )

where X is a namelist name. The contingency clauses ERR = 1,
and END = 1« are optional. The lists of items to be transmitted
are void in the above statements, because the NAMELIST statement
specifies the items to be transmitted. It is possible to
write a simple statement with the same effect as a long list and
a reference to a complicated FORMAT statement.

On input, the data to be read is identified within the input
record itself . Thus, to read the number 1.5 into a variable A,
the external input data field contains: A = 1.5 where fields are
separated by commas. The type of the data should not conflict
with the type of the list item as specified.

February 1971 CENFOR 18-13

READ (unit, namelistname) , the first character in each
data record to be read is always ignored. The second character
of the first record of a group of data records to be read
must be a \$ (or the character &) immediately followed by
the namelist name and a blank. If the name is not the one
declared in the READ statement, the input medium is searched
for a match. The remainder of the first record with a
namelist name and the following records may contain any
combination of the legal data items which are separated
by commas. The last input record is terminated by a blank
followed by \$END or &END. The constants used in the data
items may be integer, real, double precision, complex, or
logical. Logical and complex constants may be associated
only with logical and complex variables, respectively.
However, other types are converted in accordance with the
type of the variable. Blanks may not be embedded in a
constant or a repeat constant field, but may be used freely
elsewhere. The name of an array and the value of its first
elements must appear on the same record. The last item on
each record that contains data items must be a constant
followed by a comma. The comma is optional in the record
that contains or precedes the \$END sentinel.

Example of input data to be read using a namelist:

Columi

12 3

Card 1 \$ NAM1 I (2,3) = 5, 7, 9,

Card 2 0, 10, L (3) = 4.3, A = 4-, 3,

Card 3 8 * 4-3, J = 4.2

Last card \$END

Example of a namelist and a READ statement to read above input
data:

DIMENSION A (10), I (5, 5), L (10)

NAMELIST/NAMI/A, B, I, J, L (3)

Integers 5, 7, and 9 are placed in I (2, 3), I (3, 3), and
I (4, 3). Integers and 10 are placed in I (5, 3) and I
(l, 4). The real constant 4.3 is converted to integer 4

CENFDR 18-14 February 1971

and placed in L (3). Integers 4 and 3 are converted to
real constants and placed in A (l) and A (2). Real

constant 4.3 is placed in A (3) A (10).

Real constant 4.2 is converted to 4 and placed in J.

The list of items in the namelist is used on input to specify
those items which may have their values defined in the records to
be read. Not all items of the namelist need be used in the
input records nor must the input fields be in the same order
as the list items. If the list item is an array name, data
may be assigned to the entire array or any individual elements
as specified by the input records. On output, each list
item of the namelist is formatted in a standard fashion
for output in the order specified by the list.

The output data is written such that:

1. The name of a variable and its value are written
on one line.

2. The name of an array is written, with the values

of the elements of the array written in a convenient
number of columns, in the order of the array in
main storage, that is, with the left dimension.

3. The data fields are large enough to contain all the
significant digits.

4. The output can be read by an input statement
referencing the namelist name.

The form of the NAMELIST statement is:

NAMELIST / X / A, B, ... C/l/D, E, F/z/G, H, I

where X, Y, and £ are namelist names and A, B, C, D, E, F,
G, H, I are simple variables, subscripted variables, or
array names.

Example :

DIMENSION A (10), I (5, 5), L (10 )

NAMELIST / NAM1 / A, B, I, J, L (3)/NAM2/ A, C, J, K, I, (2, 3)

In the preceding example, arrays A and I, variables B and
J, and subscripted variable L (3) are associated with namelist
name NAM! and array A and variables C, J, K, and I (2, 3) are
associated with namelist name NAM2.

February 1971 CENFOR 18-15

Rules for defining and using a namelist:

1. A namelist name consists of from one to six alphanumeric
characters, the first of which must be alphabetic.

2. Within a NAMELIST statement, a namelist name is
enclosed in slashes. The list of variables
associated with a namelist name ends when a new
namelist name enclosed in slashes is encountered
or with the end of the NAMELIST statement.

3. A namelist name may be defined only once in a routine
by its appearance in a NAMELIST statement and it may
be used only in input/output statements.

U. A. namelist name has the same local-global properties
as any variable.

5. A namelist name must be unique in the routine in
which it appears.

6. A variable name or an array name may be assigned
to one or more namelist names.

7. The subscript (S) of an array element must consist
of constants or PARAMETER variables.

8. A variable in a NAMELIST statement may be a formal
argument.

9. If a namelist element is an array, its maximum
dimension may be transmitted by an argument list or
by COMMON variables.

18.19. FORMAT SCAN POINTER T

The T editing code selects a given character position for
formatted input/output, thereby allowing modification of the
normal left to right scan of a record.

FORMAT (10X, F10.3) is equivalent to

FORMAT (Til, F10.3)

On output, the order of a list need not be the same as the
printed page. For example:

FORMAT (T50, F10.3, T5, F10.2) is valid for printing the
first list item in position 50-59 and the second list item
in print position 5-14- •

CENPOR 18-16 February 1971

18.20. G EDITING CODE

This is a general editing code which provides for real, integer,
double precision, and logical conversion depending upon the
variable types. For real data, various actions occur.
If the output is real, an F or E editing cods is used depending
on the absolute value of the item. When the F form is
used, an scale factor is assumed. For real input, the G
editing code is the same as an F editing code without
scale factor.

An input/output unit number may be assigned for rereading
of the last record read. Thus, it is possible to read the
last record any number of times. Input items of a card
read with editing codes according to their types could, for
instance, be reread with an A-type editing code as
alphanumeric information. Only subsequent formatted READ
and ENCODE statements change the records to be reread.
Unit 30 is presently assigned via the NTAB table.

18.22. FREE FORMAT INPUT/OUTPUT

separated by a comma. The end of the input image is a field
end. The format specification referenced by the READ
statement mist be empty. All types of variables may be
read but no Hollerith or octal input is possible. A
standard G-type editing code is used. For example:

READ (unit, 13) K, V, C (KK (N), N = 1, 7, 2)

13 FORMAT ( )

empty format specifications. All five variable types (except
alphanumeric information) may be written. A standard G-type
editing code is used. For example:

WRITE (unit, 31) J, B, D, (AR (M), M = 9, 2, -2)

31 FORMAT ( )

No more than six fields of 13 positions are written in
free-field output. Complex variables require two fields,
both of which must be written on the same record.

18.23. MASS STORAG E FILES

Mass storage files on drum or FASTRAND may be used inter-
changeably with tape files. This is a feature implemented
in EXEC 8 via the ASG and USE control statemsnts. Refsr
to the Programmer's Reference Manual UP - 4144.

February 1971 CENFOR 18-17

18.24. ENCODE/DECODE

Core-to-core data transfers under format control can be
made using ENCODE or DECODE statements. The standard format
scanning and editing capabilities of FORTRAN V are utilized.
In other words, data can be formatted without the use of
I/O. The general forms of the statements are:

ENCODE (block, f) list

and

DECODE (block, f) list

In the above statements, list represents a standard input/
output list, f is the format statement number or the name of
an array containing format specifications, and block is the
name of the array or variable to/from which data is to be
transferred.

The execution of an ENCODE statement causes the contents of
list to be converted according to the specified format and
the results to be stored in block. This action is similar
to a WRITE statement which generates Fieldata characters.
Execution of the DECODE statement causes the contents
(in Fieldata) of the block to be moved into list items
in accordance with the format specification. This
action can be likened to a READ statement except data is
moved between areas of core storage.

18.25. OPTIMIZATION

The most outstanding feature of the UNIVAC 1108 FORTRAN V
compiler is its optimization capability which results in
extremely efficient coding. Numerous methods are employed*,
local optimization, inters tatement optimization, common
expression evaluation, register usage optimization, and
inline code generation.

18.26. MASTER SPACE COMMENT

If a master space (7/8 punch or @ sign) occurs on a line from
column 2-80, then any comment may be placed after the master
space on the same line.

18.27. Ru FORMAT CODE

This code is similar to Au except that if u is less than 6,
the rightmost characters of the list item are transmitted.

18.28 SUBSTITUTION FOR uH

If Hollerith characters are to be enclosed in a list, then

the character may be enclosed in single quotes as a substitution

CENFOR 18-18

February 1971

for uH. If a single quote is to be used as a character,

then two quotes must be used for that character. Example: l,M

is the same as 1H'.

18.29. C OMPILER STATEMENT

Certain options can be declared with this statement to be
effective for the entire programs unit. The form of the
COMPILER statements:

COMPILER (option-i), (option^), ...., (option n )

Some of these options have been defined prior to this section.
A summary of these options follows:

(FID = L) count bits left to right (35-0)

(FLD = R) count bits right to left (0-35)

(FLD - Q) quarter word optimization

(FLD = T) third word optimization

(DATA = SHORT) allows the number of constants to be fewer than
the number of variables provided that the
list of variables is an unsubs crip ted array

(DATA = IBM) allows variables to be placed in consecutive
locations of an array although 1 is named in
the DATA statement.

(MATH = A) used to remove the names of all library functions
other than generic names from the list of
automatically typed function to prevent sympol
table overflow.

(ADR = IND) used to generate code for indirect referencing of
subprogram arguments to reduce code generated
for multiple references to an argument. If used,
both referenced and referencing routines should
be compiled under their option. The code generated
under this option produces subprograms that
are re-entrant with respect to subprogram entry,
exit, and argument retrieval. Under control of
this option, the argument's address is retrieved
and stored in NTEMP\$ + i. All references to
the argument are accomplished by addressing
NTEMP\$i indirectly.

February 1971 CENPOR 18-19

Iff. 30. MATH-PACK AND ST AT -I ACK

Of interest to mathematicians and statisticians are the
extensive and comprehensive mathematical and statistical
library subprograms which are described in Program Abstracts
MATH-PACK (UP -4051) and STAT-PACK (UP-4041). This library
provides the more frequently used tools of numerical and
statistical analysis in order to speed up the preoaration
of solutions to many problems encountered in scientific
research.

MATH-STAT subprograms fall into the following categories:

Interpolation Differential Equations

Numerical Integration Systems of Equations

Solution of Equations Curve Fitting

Differentiation Random Number Generators

Polynomial Manipulation Specific Functions
Matrix Manipulation

STAT-PACK provides the following types of subprograms:

Descriptive Analysis
Elementary Population Statistics
Distribution Fitting and Plotting
Chi-Square Tests
Confidence Intervals
Analysis of Va.riance
Regression Analysis
Time Series Analysis
Multivariate Analysis
Distribution Functions
Inverse Distribution Functions
Miscellaneous

19. REFERENCE INFORMATION

March 1970 CENFOR 19- 1

19.1. SOURCE PROGRAM ORDERING

The following ordering of statements is suggested. Deviation from
these rules is not necessarily wrong; however, their observance may
prevent some common programing errors .

1. Program declaration statement.

a. In a main program, there is no program declaration
statement.

b. In a subprogram there must be a statement of
either:

(1) type FUNCTION F (a.,, a , , a )

or

(2) SUBROUTINE S (a., a„, , a )

j _ v 1' 2' 7 n

2. PARAMETER Statements.

3. Type Statements.

U. DIMENSION and COMMON Statements.

5. EQUIVALENCE Statements.

6. DATA Statements (in any event, must appear before use).

7. FORMAT Statements (may appear anywhere throughout a
program) .

8. Statement Functions (must appear before the first
executable statement of a program) .

9. Executable Statements.

10. The END Statement (at the end of a program unit only).

CENFOR 19- 2 March 1970
19.2. LIMITATIONS

Maximum statement number 32767

Maximum continuation cards 19

Maximum number of digits INTEGER 11

Maximum magnitude INTEGER 2 35 " 1

Maximum number of digits REAL 9

Maximum DOUBLE PRECISION 17

Magnitude DOUBLE PRECISION 10 38

Maximum characters in a name 6

Maximum array dimension 7

March 1970

CENFOR 19- 3

19.3. OCTAL-DECIMAL INTEGER CONVERSION TABLE

0000

to
0777
(Octal)

Octal

1C00O-
200C0 ■
30000-
40000 ■
50000 ■
60000.
70000 •

0000

to

0511

(Decimal)

Decimal
4096
8192
12288
16384
20430
24576
28672

0000
0010
0020
0030
00-10
0050
0060
0070

0100
0110
0120
0130
0140
0150
0160
0170

0200
0210
0220
0230
0240
0250
0260
0270

0300
0310
0320
0330
0340
0350
0360
0370

1

0000
0003
0016
0024
0032
00-10
0048
0056

0064
0072
0080

0001
0009
0017
0025
0033
0041
0049
0057

0002 000,3
0010 0011

0018
0026

0019
0027

0034 0035

0042 004 3

0050 0051

0058 0059

0096
0104
0112
0120

0128
0136
0144
0152
0160
0168
0176
0184

0192

0200
0203
0216
0224
0232
0240
0248

0065

0066

0067

0073

0074

0075

0031

0032

0033

0089

0090

0091

0097

0098

0099

0105

0106

0107

0113

0114

0115

0121

0122

0123

0129
0137
0145
0153
0161
0169
0177
0165

0130 0131
0138 0139

0146
0154
0162
0170
0173
0186

0147
0155
0163
0171
0179
0187

0193 0194 0195

0201 0202 0203

0209 0210 0211

0217 0218 0219

0225 0226 0227

0233 0234 0235

0241 0242 0243

0249 0250 0251

0001
0012
0020
0028
0036
0044
0052
0OG0

0068
0076
0034

0005
0013
0021
0029
0037
004 5
0053
0061

0069
0077
0085

0006
0014
0022
0030
0038
0016
0054
0062

0007
on if,
0023
0031
0030
0047
0055
0063

0092 0093

0100 0101

0108 0109

0116 0117

0124 0125

0070 0071

0078 0079

0086 0087

0094 0095

0102 0103

0110 0111

0118 0119

0126 0127

0132
0140
0148
0156
0164
0172
0130
0188

0133
0141
0149
0157
0165
0173
0131
0189

0134
0142
0150
0158
0166
0174
0182
0190

0135
0143
0151
0159
0167
0175
0183
0191

0196 0197

0204 0205

0212 0213

0220 0221

0228 0229

0236 0237

0244 0245

0252 0253

0198 0199

0206 0207

0214 0215

0222 0223

0230 0231

0238 0239

0246 0247

0254 0255

1

2

3

4

5

'6

7

1 0400

025G

0257

0258

0259

0260

0261

0262

0263

0410

0264

0265

0266

0267

0263

0269

0270

0271

. 6f2Q

0272

0273

0274

0275

0276

0277

0278

0279

0430

0280

0281

0282

0283

0284

0285

0236

0287

0440

0288

0289

0290

0291

0292

0293

0294

0295

0450

0296

0297

0298

0299

0300

0301

0302

0303

0460

0304

0305

0306

0307

0303

0309

0310

0311

0470

0312

0313

0314

0315

0316

0317

0318

0319

0500

0320

0321

0322

0323

0324

0325

0326

0327

0510

0328

0329

0330

0331

0332

0333

0334

0335

0520

0336

0337

0333

0339

0340

0341

0342

0343

0530

0344-

0345

0346

0347

0343

0349

0350

0351

0540

0352

0353

0354

0355

0356

0357

0358

0359

0550

0360

0361

0362

0363

0364

0365

0366

0367

0560

0368

0369

0370

0371

0372

0373

0374

0375

0570

0376

0377

0378

0379

0380

0381

0382

0383

0600

0384

0385

0386

0337

0338

0389

0390

0391

0610

0392

0393

0394

0395

0396

0397

0398

0399

0620

0400

0401

0402

0403

0404

0405

0406

0407

0630

0408

0409

0410

0411

0412

0413

0414

0415

0640

0416

0417

0418

0419

0420

0421

0422

0423 j

0650

0424

0425

0426

0427

0428

0429

0430

0431

0660

0432

0433

04 34

0435

0436

0437

0438

0439

0670

0440

0441

0442

0443

0444

0445

0446

0447

0700

0448

0449

0450

0451

0452

0453

0454

0455

0710

0456

0457

0458

0459

0460

0461

0462

0463 I

0720

0464

0465

0466

0467

0468

0469

0470

0471

0730

0472

0473

0474

0475

0476

0477

0473

0479

0740

0430

0481

0482

0483

0484

0485

0436

0487 !

0750 0488

0489

0490

0491

0492

0493

0494

0495

0760 0496

0497

0498

0499

0500

0501

0502

0503

0770 [ 0504

0505

0506

0507

0508

0509

0510

0511

1C00

0512

to

to

1777

1023

(Octal)

(Decimol)

1

2

3

4

5

6

7

. 1000

0512

0513

0514

0515

0516

0517

0518

0519

1010

0520

0521

0522

0523

0524

0525

0526

0527

1020

0528

0529

0530

.0531

0532

0533

0534

0535

1030

0536

0537

0538

0539

0540

0541

0542

0543

1040

0544

0545

0546

0547

0548

0549

0550

0551

1050

0552

0553

0554

0555

0556

0557

0558

0559

1060

0560

0561

0562

0563

0564

0565

0566

0567

1070

0568

0569

0570

0571

0672

0573

0574

0575

1100

0576

0577

0578

0579

0580

0581

0582

0583

1110

0584

0585

0536

0587

0588

0589

0590

0591

1120

0592

0593

0594

0595

0596

0597

0598

0599

.1130

0600

0601

0602

0603

0604

0605

0606

0607

1140

0608

0609

0610

0611

0612

0613

0614

0615

1150

0616

0617

0618

0619

0620

C621

0622

0623

1160

0624

0625

0626

0627

062(2

0629

0530

0631

1170

0632

0633

0634

0635

0636

0637

0638

0639

1200

0640

0641

0642

0643

0644

0645

0646

0647

1210

0648

0649

0650

0651

0652

0653

0654

0655

1220

0656

0657

0658

0659

0660

0661

0662

0663

1230

0664

0665

0666

0667

0663

0669

0670

0671

1240

0672

0673

0674

0575

0676

0677

0673

0679

} 1250

0680

0681

0682

0683

0684

0635

0636

0687

1260

0688

0539

0690

0691

0692

0693

0694

0695

1270

0696

0697

06S8

0699

0700

0701

0702

0703

1300

0704

0705

0706

0707

0708

.0709

0710

0711

1310

0712

0713

0714

0715

0716

0717

0718

0719

1320

0720

0721

0722

0723

0724

0725

0726

0727

1330

0728

0729

0730

0731

0732

0733

0734

0735

1340

0736

0737

0733

0733

0740

0741

0742

0743

1350

0744

0745

074 6

0747

0748

0749

0750

0751

1360

0752

0753

075-.

0755

0756

0757

0758

0759

1370

0760

0761

0762

0763

0764

0765

0766

0767

1400
1410
1420
1430
1440
1450
1460
1470

1500
1510
1520
1530
1540
1550
1560
1570

1600
1610
1620
1630
1640
1650
1660
1670

1700
1710
1720
1730
1740

j 1750
1760

I 1770

1

0768 0769

0776 0777

0784 0785

0792 0793

0800 0801

0808 0809

0816 0817

0824 0825

0832 0833

0840 0841

0848 0349

0856 0857

0864 0865

0872 0873

0880 0881

0888 0889

0896
0904
0912
0920
0923
0936
0944
0352

0960
0968
0976
0934
0992
1000
1003
1016

0897
0905
0913
0921
0929
0937
0945
0953

0961
0969
0977
0985
0993
1001
1009
1017

0770
0778
0786
0794
0302
0810
0818
0826

0834
0842
0850
0858
0366
0874
0882
0890

0898
0906
0914
0922
0930
0938
0946
0954

0962
0970
0978
0936
0994
1002
1010
1018

0771
0779
0787
0795
0803
0811
0819
0827

0835
0843
0851
0859
0867
0875
0883
0831

0833
0307
0915
0923
0931
0939
0947
0355

0772 0773

0780 0781

07S8 0783

0796 0797

0304 0305

0812 0813

0820 0821

0828 0829

0836 0837

0344
0352
0860
0868
0870
0884

0845
0353
0S61
0S69
0377
0885

0892 0393

0774 0775

0782 0783

0790 0791

0793 0799

0306 0807

0814 0815

0322 0823

0830 0331

0338 0839

0346 0347

0354 0355J

0362 036o!

0870 0871 j

0878 0379:

0836 0337J

0394 0895!

0300
0908
0916
0924
0932
0940
0943
0956

0901 0902 0303

0909 0910 0311

0317 0318 0919

0925 0926 0327

0933 0334 0935

0941 0942 0943

0949 0950 0951

0957 0953 0959

0963 0964
0971 0372
0379 0930
0337 0038
0995 0936
1003 1004
1011 1012
1013 1020

C3G5
0373
0331
0339
0397
1005
1013
1021

0966
0974
0932
0330
0333
1005
1014
1022

0367
0375
0383
0331
0353
10-07
1015
1023

CENFOR 19- 4

March 1970

19.3. OCTAL-DECIMAL INTEGER CONVERSION TABLE (Continued)

1

2

3

4

5

6

7

2000

1024

1025

1026

1027

1028

1029

1030

1031

2010

1032

1033

1034

1035

1036

1037

1038

1039

2020

1040

1041

1042

1043

1044

1045

1046

1047

2030

1043

1049

1050

1051

1052

1053

1054

1055

2040

1056

1057

1058

1059

1060

1061

1062

1063

2050

1064

1065

1066

1067

1068

1009

1070

1071

2060

1072

1073

1074

1075

1076

1077

1078

1079

2070

1080

1081

1082

1083

1084

1085

1086

1087

2100

1088

1089

1090

1091

1092

1093

1094

1095

2110

1096

1097

1098

1099

1100

1101

1102

1103

2120

1104

1105

1106

1107

1108

1109

1110

1111

2130

1112

1113

1114

1115

1116

1117

1118

1119

2140

1120

1121

1122

1123

1124

1125

1126

1127

2150

1128

1129

1130

1131

1132

1133

1134

1135

2160

1136

1137

1138

1139

1140

1141

1142

1143 [

2170

1144

1145

1140

1147

1148

1149

1150

1151!

2200

1152

1153

1154

1155

1156

1157

1158

1159

2210

1160

1161

1162

1163

1164

1165

1166

1167

2220

1168

1169

1170

1171

1172

1173

1174

1175 j

2230

1176

1177

1178

1179

1180

1181

1182

1183]

f 2240

1134

1185

1186

1187

1183

1189

1190

11911

'2250

1192

1193

1194

1195

1196

1197

1198

1199

2260

1200

1201

1202

1203

1204

1205

1206

1207;

2270

1208

1209

1210

1211

1212

1213

1214

1215]

2300

1216

1217

1218

1219

1220

1221

1222

1223

2310'

1224

1225

1226

1227

1228

1229

1230

1231

2320:
2330.

1232
1240

1233
1241

1234
1242

1235

1243

1236
1244

1237
1245

1238
1246

1239!
1247'

12340 ! 1248 1249 1250 1251

2350 j 1256 1257 1258 1259

2360 j 1264 1265 1266 1267

2370 11272 1273 1274 1275

1252 1253 1254 1255;

1250 1261 1252 1263j

1268 1269 1270 1271

1276 1277 1278 1279i

1

2

3

4

5

6

7

2400! 1280

1281

1232

1283

1284

1285

1286

1287

2410! 1288

1239

1290

1291

1292

1293

1294

1295

2420 1296

1297

1298

1299

1300

1301

1302

1303

2430! 1304

1305

1306

1307

1308

1309

1310

1311

2440; 1312

1313

1314

1315

1316

1317

1318

1319

2450! 1320

1321

1322

1323

1324

1325

1326

1327

2460 ' 1328

1329

1330

1331

1332

1333

1334

1335

2470

1336

1337

1338

1339

1340

1341

1342

1343

2500

1344

1345

1346

1347

1348

1349

1350

1351

2510

1352

1353

1354

1355

1356

1357

1358

1359

2520

1360

1361

1362

1363

1364

1365

1366.

1367

2530

1368

1369

1370

1371

1372

1373

1374

1375

| 2540

1376

1377

1378

1379

1380

1381

1332

1383

j 2550

1384

1385

1386

1387

1388

1389

1390

1391

2560

1392

1393

1394

1395

1396

1397

1398

1399

2570 1400

1401

1402

1403

1404

1405

1406

1407

2600! H08

1409

1410

1411

1412

1413

1414

1415

2610

1416

1417

1418

1419

1420

1421

1422

1423

.2620

1424

1425

1426

1427

1428

1429

1430

1431

2630

1432

1433

1434

1435

1436

1437

1438

1439

2640

'1440

1441

1442

1443

1444

1445

1446

1447

2650

1448

1449

1450

1451

1452

1453

1454

1455

2660

1456

1457

1458

1459

1460

1461

1462

1463

2670

1464

1465

1466

1467

1468

1469

1470

1471

2700

1472

1473

1474

1475

1476

1477

1478

1479

2710

1480

1481

1482

1483

1484

1485

1486

1487

2720 j 1483

1489

1490

1491

1492

1493

1494

1495

2730 1 1496

1497

1498

1499

1500

1501

1502

1503

2740! 1504

1505

1506

1507

1508

1509

1510

1511

2750

1512

1513

1514

1515

1516

1517

1518

1519

2760

1520

1521

1522

1523

1524

1525

1526

1527

2770

1528

1529

1530

1531

1532

1533

1534

1535

2000 J 1024

io to

2777 I 1535

(Octol) I (Decimal)

Octal Decimal
10000- 4096
20000- 8192
30000- 12238
40CG0- 16384
50000-20480
60000-24576
70000-28672

1

2

3

4

5

6

7

3000

1536

1537

1538

1539

1540

1541

1542

1543

3010

1544

1545

1546

1547

1548

1549

1550

1551

3020

1552

1553-

1554

1555

1556

1557

1558

1559

3030

1560

1561

1562

1563

1564

1565

1566

1567

3040

1568

1569

1570

1571

1572

1573

1574

1575

3050

1576

1577

1578

1579

1580

1581

1582

1583

3060

1584

1585

1586

1587

1588

1589

1590

1591

3070

1592

1593

1594

1595

1596

1597

1598

1599

3100

1600

1601

1602

1603

1604

1605

1606

1607

3110

1608

1609

1610

1611

1612

1613

1614

1615

3120

1616

1617

1618

1619

1620

1621

1622

1623

3130

1624

1625

1626

1627

1628

1629

1630

1631

3140

1632

1633

1634

1635

1636

1637

1638

1639

3150

1640

1641

1642

1643

1644

1645

1646

1647

3160

1648

1649

1650

1651

1652

1653

1654

1655

3170

1656

1657

1658

1659

1660

1661

1662

i663

3200

1664

1665

1666

1667

1668

1669

1670

1671

3210

1672

1673

1674

1675

1676

1677

1678

1679

3220 j 1680

1681

1682

1683

1684

1685

1686

1687

3230 1688

1639

1690

1691

1692

1693

1694

1695

3240

1696

1697

1698

1699

1700

1701

1702

1703

3250

1704

1705

1706

1707

1708

1709

1710

1711

3260J 1712

1713

1714

1715

1716

1717

1718

1719 |

3270

1720

1721

1722

1723

1724

1725

1726

1727 1

3300

1728

1729

1730

1731

1732

1733

1734

1
17351

3310

1736

1737

1738

1739

1740

1741

1742

1743

3320 1744

1745

1746

1747

1748

1749

1750

1751

3330

1752

1753

1754

1755

1756

1757

1758

1759]

3340

1760

1761

1762

1763

1764

1765

1766

17671

3350

1768

1769

1770

1771

1772

1773

1774

1775

3360

1776

1777

1778

1779

1780

1781

1782

1783

3370

1784

1785

1786

1787

1788

1789

1790

17911

1

2

3

4

5

6

7

3400 1792

1793

1794

1795

1796

1797

1798

1799

3410 1 1800

1801

1802

1803

1804

1805

1806

1307

3420

180S

1809

1810

1811

1812

1813

1814

1815

3430

1816

V817

1818

1819

1820

1821

1822

1823

3440

1824

1825

1826

1827

1828

1829

1830

1831

3450

1832

1833

1834

1835

1836

1837

1838

1839

3460

1840

1841

1842

1843

1844

1845

1846

1847

3470

1848

1849

1850

1851

1852

1853

1854

1855

3500

1856

1857

1858

1859

i860

1861

1862

18133

3510

1864

1865

1866

1867

J 868

1869

1870

1871

3520

1872

1873

1874

1875

1876

1877

1878

1879

3530

1830

1881

1882

1883

1884

1885

1886

1887

3540

1888

1889

1890

1891

1892

1893

1894

1895

3550

1896

1897

1898

1899

1900

1901

1902

1903

3560

1904

1905

1906

1907

1908

1909

1910

1911

3570

1912

1913

1914

1915

1916

1917

1918

1919

3600

1920

1921

1922

1923

1924

1925

1926

1927

3610

1928

1929

1930

1931

1932

1933

1934

1935

3620

1936

1937

1938

1939

1940

1941

1942

19-43

3630

1944

1945

1946

1947

1948

1949

1950

1951

3640

1952

1953

1954

1955

1956

1957

1958

1959

3650

1960

1961

1962

1963

1964

1965

1966

1967

3660 1968

1969

1970

1971

1972

1973

1974

1975

3670 1976

1977

1978

1979

1980

1981

1982

1983 |

3700 1984

1985

1986

1987

1988

1989

1990

1991

3710i 1992

1993

1994

1995

1996

1997

1998

1999

3720 j 2000

200!

2002

2003

2004

2005

2006

2007

j 3730 2008

2009

2010

2011

2012

2013

2014

2015

13740

2016

2017

2018

2019

2020

2021

2022

2023

3750

2024

2025

2026

2027

2028

2029

2030

2031

3760

2032

2033

2034

2035

2036

2037

2038

2039

3770

2040

2041-

2042

2043

2044

2045

2046

2047

3000

1536

to

to

3777

2047

'Octal)

(Decimal)

March 1970

CENFOR 19- 5

19.3. OCTAL- DECIMAL INTEGER CONVERSTION TABLE ( Continued)

OCTAL-DECIMAL INTEGER CONVERSION TABLE

4000

2048

to

to

4777

2559

(Octal)

(Decimal)

Octal

Decimal

10000'-

4096

20000 -

8192

30000-

12288

40000 -

16384

50000 -

20480

60000 -

24576

70000 -

28672

1

2

3

4

5

6 7

4000

2048

2049

2050

2051

2052

2053

2054 2055

14010

2056

2057

2058

2059

2060

2061

2062 2063

4020

2064

2065

2066

2067

2068

2069

2070 2071

4030

2072

2073

2074

2075

2076

2077

2078 2079

4040

2030

2081

2082

2083

2 1 ~'S4

2035

2086' 2087

4050

2088

2089

2090

2091

2092

2093

2094 2095

4060

2096

2097

2098

2099

2100

2101

2102 2103

4070 2104

2105

2106

2107

2108

2109

2110 2111

4100 2112

2113

2114

2115

2116

2117

2118 2119

4110 2120

2121

2122

2123

2124

2125

2126 2127

4120; 2128

2129

2130

2131

2132

2133

2134 2135

4130J 2136

2137

2138

2139

2140

2141

2142 2143

4140 2144

2i45

2146

2147

2148

2149

2150 2151

4150 2152

2153

2154

2155

2156

2157

2158 2159

4160J 2160

2161

2162

2163

2164

2105

2166 2167

4170

2168

2169

2170

2171

2172

2173

2174 2175

4200

2176

2177

2178

2179

2180

2181

2182 2183

4210

2184

2185

2186

2187

2188

2189

2190 2191

42201 2192

2193

2194

2195

2196

2197

2198 2199

4230j 2200

2201

2202

2203

2204

2205

2206 2207

4240 2208

2209

2210

2211

2212

2213

2214 2215

4250l 2216

2217

2218

2219

2220

2221

2222 2223

4260

2224

2225

2226

2227

2228

2229

2230 2231

43^0

2232

2233

2234

2235

2236

2237

2238 2239!

4300

2240

2241

2242

2243

2244

2245

2246 2247

4310

2248

2249

2250

2251

2252

2253

2254 2255|

4320

2256

2257

2258

2259

2260

2261

2262 2263

4330

2264

2265

2266

2267

2268

2269

2270 2271

4340

2272

2273

2274

2275

2276

2277

2278 2279

4350

2280

2281

2282

2233

2284

2285

2286 2287]

4360

2288

2289

2290

2291

2292

2293

2294 2295

4370

2296

2297

2298

2299

2300

2301

2302 2303|

4400
4410
4420
4430
4440
4450
4460
4470

4500
4510
4520
4530
4540
4550
4560
4570

4600
4610
4620
4630
4640
4650
4660
4670

4700
4710
4720
4730
4740
4750
4760
4770

1

2304
2312
2320
2328
2336
2344
2352
2360

2368
2376
2384
2392
2400
2408
2416
2424

2432

2440
2448
2456
2464
2472
2480
2488

2496
2504
2512
2520
2528
2536
2544
2552

2305
2313
2321
2329
2337
2345
2353
2361

2369
.2377
2385
2393
2401
2409
2417
2425

2433
2441
2449
2457
2465
2473
2481
2489

2497
2505
2513
2521
2529
2537
2545
2553

2306
2314
2322
2330
2338
2346
2354
2362

2370
2378
2386
2394
2402
2410
2418
2426

2434
2442
2450
2458
2466
2474
2482
2490

2498
2506
2514
2522
2530
2538
2546
2554

2307 2308

2315 2316

2323 2324

2331 2332

2339 2340

2347 2343

2355 2356

2363 2364

2371
2379
2387
2395
2403
2411
2419
2427

2435
2443
2451
2459
2467
2475
2483
2491

2372
2380
2388
2396
2404
2412
2420
2428

2436
2444
2452
2460
2468
2476
2484
2492

2309
2317
2325
2333
2341
2349
2357
2365

2373

2381
2389
2397
2405
2413
2421
2429

2437
2445
2453
2461
2469
2477
2485
2493

2310 2311

2318 2319

2326 2327

2334 2335

2342 2343

2350 2351

2358 2359

2366 2367

2374
2382
2390
2398
2406
2414
2422
2430

2375
2333
2391
2399
2407
2415
2423
2431

2438 2439

2446 2447

2454 2455

2462 2463

2470 2471

2478 2479

2486 2487

2494 2495

2499 2500 2501

2507 2503 2509

2515 2516 2517

2523 2524 2525

2531 2532 2533

2539 2540 2541

2547 2548 2549

2555 2556 2557

2502
2510
2518
2526
2534
2542
2550
2558

2503
2511
2519
2527
2535
2543
2551
2559

5000

to
5777
(Octal)

2560

to

3071

(Decimal)

1

2

3

4

5

6

7

5000

2560

2561

2562

2563

2564

2565

2566

2567

5010

2568

2569

2570

2571

2572

2573

2574

2575

5020

2576

2577

2578

2579

2580

2581

2582

2583

5030

2534

2585

2586

2587

2588

2589

2590

2591

5040

2592

2593

2594

2595

2596

2597

2598

2599

5050

2600

2601

2602

2603

2604

2605

2606

2607

5060

2608

2609

2610

2611

2612

2613

2614

2615

5070

2616

2617

2618

2619

2620

£621

2622

.2623

5100

2624

2625

2626

2627

2628

2629

2630

2631

5110

2632

2633

2634

2635

2636

2637

2638

2639

512C

2640

2641

2642

2643

2644

2645

2646

2647

5130

2648

2649

2650

2651

2652

2653

2654

2655

5140

2656

2657

2658

2659

2660

2661

2662

2663]

5150

2664

2665

2666

2667

2668

2669

2670

2671

5160

2672

2673

2674

2675

2676

2677

2678

2679

5170

2680

2681

2682

2683

2684

2685

2686

2687

5200

2688

2689

2690

2691

2692

2693

2694

2695

5210

2696

2697

2698

2699

2700

2701

2702

2703

5220

2704

2705

2706

2707

2708

2709

2710

2711

5230

2712

2713

2714

2715

2716

2717

2718

2719

5240

2720

2721

2722

2723

2724

2725

2726

2727

5250

2728

2729

2730

2731

2732

2733

2734

2735

5260

2736

2737

2733

2739

2740

2741

"2742

2743

5270

2744

2745

2746

2747

2748

2749

2750

2751

5300

2752

2753

2754

2755

2756

2757

2758

2759

5310

2760

2761

2762

2763

2764

2765

2766

2767

5320

2768

2769

2770

2771

2772

2773

2774

2775

5330

2776

2777

2778

2779

2780

2781

2782

2783

5340

2784

2785

2786

2787

2788

2789

2790

2791

5350

2792

2793

2794

2795

2796

2797

2798

2799

5360

2800

2801

2802

2803

2804

2805

2806

2807

5370

2808

2809

2810

2811

2812

2813

2814

2815

1

2

3

4

5

6

7

5400 1 2816

2817

2818

2819

2820

2821

2822

2823

5410 2824

2825

2826

2827

2828

2829

2830

2831

5420:2832

2833

2834

2835

2836

• 2837

2838

2839

5430 | 2840

2841

2842

2843

2844

2845

2846

2847

5440 2848

2849

2850

2851

2852

2853

2854

2855

5450

2856

2857

2858

2859

2860

2861

2862

2863

5460

2864

2865

2866

2867

2868

2869

2870

2871

5470

2872

2873

2874

2875

2876

2877

2878

2879

5500

2880

2881

2882

2883

2884

2885

2886

2887

5510

2888

2889

2890

2891

2892

2893

2894

2895

5520

2896

2697

2898

2899

2900

2901

2902

2903

5530

2904

2905

2906

2907

2908

2909

2910

2911

5540

2912

2913

2914

2915

2916

2917

2918

2919

5550

2920

2921

2922

2923

2924

2925

2926

2927

5560

2928

2929

2930

2931

2932

2933

2934

2935

5570

2936

2937

2938

2939

2940

2941

2942

2943

5600

2944

2945

2946

2947

2948

2949

2950

2951

5610

2952

2953

2954

2955

2956

2957

2958

2959

5620

2960

2961

2962

2963

2964

2965

2966

2967

5630

2968

2969

2970

2971

2972

2973

2974

2975

5640

2976

2977

2978

2979

2980

2981

2982

2983

5650

2984

2985

2986

2937

2988

2989

2990

2991

5660

2992

2993

2994

2995

2996

2997

2993

2999 1

5670

3000

3001

3002

3003

3004

3005

3006

3007

5700

3008

3009

3010

3011

3012

3013

3014

3015

5710

3016

3017

3018

3019

3020

3021

3022

3023

5720

3024

3025

3026

3027

3028

3029

3030

3031

5730

3032

3033

3034

3035

3036

3037

3038

3039

5740

3040

3041

3042

3043

3044

3045

3046

3047

5750

3048

3049

3050

3051

3052

3053

3054

3055

5760

3056

3057

3058

3059

3060

3061

3062

3063

5770

3064

3065

3066

3067

3068

3069

3070

3071

CENFOR 19-6

March 1970

19.3.

OCTAL- DECIMAL INTEGER CONVERSION TABLE (Continued)

OCTAL-DECIMAL INTEGER CONVERSION TABLE

l

| 1

COCO 3072 3073

'6010 1 3080 3081

Io020 I 3088 3089

6030 3096 3097

6040 3104 3105

6050 3112 3113

16060 3120 3121

3074
3082
3090
3093
3106
3114
3122

3075
3033
2091
3099
3107
3115
3123

0070 ; 3128 3129 3130 3131

3076 3077

3034 3085

3092 3093

3100 3101

3108 3109

3116 3117

3124 3125

3132 3133

3078 3070

3036 3087

3094 3095

3102 3103

3110 3111

3118 3119

3126 3127

3134 3135

jeiOO 13136 3137 3138 3139 3140 3141 3142 314?.

[Ci 10 13144 3145 314G 3147 3148 3149 3150 3151

IG120J3I52 3153 3154 3155 3156 3157 3158 3159

16130 ■ 3160 3161 3162 3163 3164 3165 3166 3167

6140
6150
6160
6170

3163 3169 3170 3171 3172 3173 3174 3175

3176 3177 3173 3179 3180 3181 3182 3183

3184 3185 3136 3187 3188 3189 3190 3191

3192 3193 3194 3195 3196 3197 3198 3199

6200 3200
6210 3208

6220
6230
6240
6250
6260
6270

6300
6310
6320
6330
6340

3216
3224
3232
3240
3248
3256

3264
3272
3280
3233
3296

3201 3202

3209 3210

3217 3218

3225 3226

3233 3234

3241 3242

3249 3250

3257 3258

3203 3204

3211 3212

3219 3220

3227 3228

3235 3236

3243 3244

3251 3252

3259 3260

3205 3206 3207

3213 3214 3215

3221 3222 3223

3229 3230 3231

3237 3238 3239

3245 3246 3247

3253 3254 3255

3261 3262 3263

6350 i 3304
6360 ■ 3312
6370 3320

3265 3266 3267

3273 3274 3275

3281 3282 3283

3289 3290 3291

3297 3293 3299

3305 3306 3307

3313 3314 3315

3321 3322 3323

3268 3269

3276 3277

3284 3285

3292 3293

3300 3301

3308 3309

3316 3317

3324 3325

3270 3271

3278 3279

3286 3287

3294 3295

3302 3303

3310 3311

3318 3319

3326 3327

I

C400 3328
64101 3336

6420
6430
6440
6450
6460
6470

0500
6510
6520
6530

3344
3352
3360
3368
3376
3384

3392
3400
3403
3416

3329
3337
3345
3353
3361
3369
3377
3385

3330 3331

3338 3339

3346 3347

3354 3355

3362 3363

3370 3371

3378 3379

3386 3387

6540! 3424
6550) 3432
6560 1 3440
6570! 3448

3394 3395
3402 3403

6600'
6610 I

6620 I

6630 |

6640

6650

6660i

6670

3456
3464
3472
3480
3488
3496
3504
3512

3393
340J

3409 3410 3411

3417 3418 3419

3425 3426 3427

3433 3434 3435

3441 3442 3443

3449 3450 3451

3457 3458 3459

3465 3466 3467

3473 3474 3475

3481 3482 3483

3489 3490 3491

3497 3498 3499

3505 3506 3507

3513 3514 3515

3332 3333

3340 3341

3348 3349

3356 3357

3364 3365

3372 3373

3380 3381

3388 3389

3396 3397

3404 3405

3412 3413

3420 3421

3428 3429

3436 3437

3444 3445

3452 3453

3460 3461

3468 3469

3476 3477

3484 3485

3492 3493

3500 3501

3508 3509

3516 3517

3334
3342
3350
3358
3366
3374
3382
3390

3335
3343
3351
3359
3367
3375
3383
3391

3393 3399;

3406 3407 j

3414 3415i

3422 3423 |

3430 3431

3438 3439!

3446 3447

3454 3455

3462 3463

3470 3471

3478
3486
3494
3502
3510
3518.

3479
3487
3495
3503
3511
3519

6700

3520 3521 3522 3523 3524 3525 3526 3527

6710

3528 3529 3530 3531 3532 3533 3534 3535

6720

3536 3537 3538 3539 3540 3541 3542 3543

6730

354.4 3545 3546 3547. 3548 3549 3550 3551

6740

3552 3553 3554 3555 3556 3557 3558 3559

6750

3560 3561 3562 3563 3564 3565 3566 3567

6760

3568 3569 3570 3571 3572 3573 3574 3575

6770

3576 3577 3578 3579 3580 3581 3582 3583

6000 3072

to to

6777 3583

(Octal) 1 (Decimal)

Octal Decimal
10000- 4096
20000- 8192
30000- 12233
400C0- 16334
500C0- 20480-
60000 - 24576
70000 - 28672

1

2

3

4

5

6

7

7000

3584

3585

3586

3587

3588

3589

3590

3591

7010

3592

3593

3594

3595

3596

3597

3598

3599

7020

3600

3601

3602

3603

3604

3605

3606

3607

7030

3608

3609

3610

3611

3612

3613

3614

3615

7040

3616

3617

3618

3619

3620

3621

3622

3623

7050

3624

3625

3626

3627

3628

3629

3630

3631

7060

3632

3633

3634

3635

3636

3637

3638

3639

7070

3640

3641

3642

3643

3644

3645

3646

3647

7100

3643

3649

3650

3651

3652

3653

3654

3655

7310

3616

3657

3658

3659

3660

3661

3662

3663

7 L- OJ

%64

3665

3666

3667

3668

3669

3670

3671

713C

3fc7Z

3673

3674

3675

3676

3677

3678

3679

'Uuu

3660

3681

3682

3683

3684

3635

3686

3687

7150

2638

3689

3690

3691

3692

3693

3694

3695

7160

3696

3697

3698

3699

3700

3701

3702

3703

. 7170

3704

3705

3706

3707

3708

3709

3710

3711

! 7200

3712

3713

3714

3715

3716

3717

3718

3719

7210

3720

3721

3722

3723

3724

3725

3726

3727

7220

3728

3729

3730

3731

3732

3733

3734

3735

7230

3736

3737

3738

3739

3740

3741

3742

3743

7240

3744

3745

3746

3747

3748

3749

3750

3751

7250

3752

3753

3754

3755

3756

3757

3753

3759

7260

3760

3761

3762

3763

3764

3765

3766

3767

7270

3768

3769

3770

3771

3772

3773

3774

3775

7300

3776

3777

3778

3779

3780

3781

3782

3783

7310

3784

3785

3786

3787

3788

3789

3790

3791

7320

3792

3793

3794

3795

3796

3797

3798

3799

7330

2800

3801

3802

3803

3804

3805

3806

3807

7340

3808

3809

2810

3811

3812

3813

3814

3815

7350

3816

3817

3818

3819

3820

3821

3822

3823

7360

3824

3825

3826

3827

3828

3829

3830

3831

7370

3832

3333

3834

3835

3836

3837

3838

3839

7400
7410
7420
7430
7440
7450
7460
7470

7500
7510
7520
7530
7540
7550
7jj60
7570

1

3340 3841

3848 3849

3856 3857

3364 3865

3872 3373

3830 3881

3888 3889

3896 3897

3842
3850
3858
3866
3874
3882
3890
3898

3904
3912
3920
3928
3936
3944
3952
3960

3905 3906

3913 3914

3921 3922

3929 3930

3937 3938

3945 3946

3953 3954

3961 3962

3843
3851
3859
3867
3875
3883
3891
3899

3907
3915
3923
3931
3939
3947
3955
3963

3844
3852
3860
3868
3876
3884
3392
3900

3845 3346

3853 3854

3861 3362

3869 3870

3877 3873

3885 3886

3893 3894

3901 3902

3847
3855
3863
3871
3879
3887
3895
3903

3908 3909

3916 3917

3924 3925

3932 3933

3940 3941

3948 3949

3956 3957

3964 3965

7600

3968

3969

3970

3971

3972

3973

3974

7610

3976

3977

3978

3979

3980

3981

3982

7620

3984

3985

3986

3987

3983

3989

3990

7630

3992

3993

3994

3995

3996

3997

3998

7640

4000

4001

4002

4003

4004

4005

4006

7650

4008

4009

4010

4011

4012

4013

4014

7660

4016

4017

4018

4019

4020

4021

4022

7670

4024

4025

4026

4027

4028

4029

4030

3910 3911

3918 3919

3926 3927

3934 3935

3942 3943

3950 3951

3958 3959

3966 3967

3975
3983
3991
3999
4007
4015
4023
4031

7700

4032 4033 4034 4035 4036 4037 4038 4039

7710 14040 4041 4042 4043 4044 4045 4046 4047

7720 4043 4049 4050 4051 4052 4053 4054 4055

7730 1 4056 4057 4058 4059 4060 4061 4062 4063

7740

4064 4065 4066 406" 4068 4069 4070 4071

7750

4072 4073 4074 4075 4076 4077 4078 4079

7760

4080 4081 4082 4083 4034 4085 4086 4087

7770

4088 4089 4090 4091 4092 4093 4094 4095

7000

3584

to

to

7777

4095

(Octal)

(Decimal)

March 1970

CENFOR 19- 7

19.4-. 1107 OPERATOR TERMINATION CODES

CATEGORY

TERMINATION CAUSE

CODE

PD

Program/Data Troubles:

1. Program communi cation of inability to continue,
or in loop — terminated with dump

(Use also for reruns terminated w/o dump if
original run was terminated with a dump)

2. Other program/data incompatability (excluding
setup or operating instruction problems)

PD 1

PD 2

SE

Setup Troubles:

1. Program/inputs missing or incorrect

2. Operating instructions missing or incompatable

3. C/r cards incorrectly stacked

SE 1
SE 2
SE 3

HE 1
HE 2

HE

Human Errors:

1. Technician/Operations personnel error

2. Scheduling error

TR

due to hardware or physical tape defects
(x = last four digits of tape number)

TR(xxxx)
FL(xx|

FL

Hardward Malfunction: All hardware failures except
Servo hardware malfunctions (x = channel
I.D. — for central computer^ tyj>e in "Z")

SF
TB

Servo Malfunction: All servo hardware failures (xx =
__Servo_I.D.)_

Tape Troubles: All physical tape defects including
dirty tapes (x = last four digits of tape
number)

__SF(xx)_
TB(xxxx)

OT

Miscellaneous:

1. Function end, or to expedite schedule

2. Termination at request of sponsor

OT 1
OT 2

CENFOR 19- 8 March 1970

19.5. ERROR CODES

LION FILE CONTROL ERROR EXIT
19.5.1. LION ERROR CODES THAT INDICATE EQUIPMENT MALFUNCTION

3A Uniservo

32 In an end-of-reel operation, a request to EXEC I for a
rewind

33 (code 32) or a rewind with Interlock (Code 33) results
In an error status. This indicates either equipment
trouble or that the tape unit is otherwise engaged. No
recovery.

37 When opening an output file, the preliminary rewind
returned an error status signal from EXEC I. This
indicates either equipment trouble or that the tape
was otherwise engaged. No recovery.

38 When opening an output file , a read backward operation
during the preliminary positioning of the tape returned
an error status signal from EXEC I. This indicates
either equipment trouble or that the tape unit was
otherwise engaged. No recovery.

39 To reposition the tape for a rewrite of a block which
has just been written or read in a forward direction,
the tape must be moved back two blocks and then forward
one block. The move forward is not completed correctly,
and an error status signal is received from EXEC I.
This is almost invariably caused by equipment trouble

No recovery.

4-0 In attempting to reposition the tape for overwriting,
a backward read has not been successfully completed.
No recovery.

4-1 Failure to read a block after successful repositioning
described In error code 4-0. No recovery.

4-2 Incorrect positioning of a tape at the beginning of a
reel, probably due to equipment malfunction. No
recovery.

4-3
44-

4-5

Incorrect positioning of an input tape at a label block or
End-of-File sentinel. No recovery.

2 A Uniservo

108 The rewind after the typeout following a checksum operation
has not been completed normally. No recovery.

114- After a write error, an attempt to move the tape backward

has indicated another error, other than an end-of-file. No
recovery.

115 Tape positioning error in a write operation. No recovery.

March 1970

CENFOR 19- 9

19.5.2. LION ERROR CODES

CODE

USE

Octal

Decimal

1

1

10

EO

ORIGIN

IODRUP

DESCRIPTION

The output file has filled up the available
drum table area to a point where another
full buffer cannot be written. The last
item presented for writing has not been
recorded on the drum. The file is left
in an open condition. For Internal Format
files, the sentinel word will have been
recorded, and the drum file can therefore
be used successfully as an input file.

Recovery may possibly be effected by stor-
ing zero in the lower half of pa + 16,
lengthening the amount of usable drum area
at pa + 20, and re-executing the calling
sequence which caused the error. To close
the file, a non-zero value should be stored
in bits 29-24 of pa + 12.

Note that if LION had attempted to write
in a drum area not assigned to the pro-
gram, the jump would have been to the
Write Error Exit.

II I0165A The input buffer size is smaller than the
block size as recorded on tape or drum.
Recovery may possibly be effected by setting
bits 11-6 of pa - 26 to a non-zero value,
increasing the buffer size, and reopening
the input file. Position has not been
lost on the input tape or drum.

II IOENDF While closing a file, or a reel, the rewind
10 parameter was a six-letter word not ending

EI in D, T, or L. LION tests the last letter

EO of REWIND, REWINT, or NOREWI to determine

the rewind procedure. Any left justified
coding of less than six characters will have
the same effect as REWINT.

To recover, change the code in the appro-
priate IBANK macro (e.g., at OENREL + 3),
and re-execute the close file or close reel
calling sequence.

4

4. 10 OPNOUT An attempt to open an already open output

file has been made. No recovery.

CENFOR 19-10

March 1970

19.5.2. LION ERROR CODES (Continued)
CODE USE ORIGIN

Octal Decimal

5 10

6 II

10

11

12

10

II

II

II

10

13

H

11

12

10

10

15

13

II
EI

DESCRIPTION

IOKBEG An attempt to perform an ITMOUT, BYPASS,
OENFIL or OENREL operation has been made,
with the file either closed or demanding
an OENREL. No recovery.

ITMIN An attempt has been made to perform an
ITMIN operation with the file not yet
opened, or when an End-of-File or End-of-
Reel calling sequence is the only legiti-
mate operation. No recovery.

IENREL An attempt has been made to execute an

End-of-Reel procedure on an already closed
input file. No recovery.

IENFIL An attempt has been made to execute an

End-of-File procedure on an already closed
input file. No recovery.

OPNIN An attempt has been made to open an

already open input file. No recovery.

OPNOUT When opening an output file, LION has found
that the fixed item size is greater than
the buffer size. Recovery may be possible
by modifying the buffer size in the upper
half of pp + 19, setting bits 29-24 of
pa + 12 to a non-zero value , and reopening
the file. Or, if the buffer had been
coded symbolically, it may be increased
via the TAL card and the program can be
rerun.

ITMOUT An Item in a variable item size file is

too large for the output buffer. Recovery
procedures are similar to code 12^.

IOOl^C During the preliminary positioning of an

output file, a read backward operation has
detected a block which is neither a label
block nor an End-of-File sentinel block;
indicating that the tape had been improperly
positioned by the user prior to opening the
file. Normally no recovery is possible.

I0165A There is an invalid flag in bits 35-33 of
the label block, indicating that probably
this tape was not originally written by
LION. No recovery.

March 1970

CENFOR 19-11

19.5.2. LION ERROR CODES (Continued)
CODE USE ORIGIN

DESCRIPTION

Octal Decimal

16

14- 10

17

20

15 10
EO

16 10

21

22

17 10

18 II
EI

23

24

19

I0017A As LION prepared to record a label block,
it is found that the size of the File
Label (including Free Words) is greater
than the maximum allowed for the speci-
fied block size, i.e., 113 words for a
120 word tape block, 233 words for a 240
word tape block, and 5 words less than
the buffer size for drum files. No
recovery.

IOTBEG The output file being referenced does not
have a tape unit or drum table assigned.
No recovery.

IOTBEG The buffer size of a tape output file is

less than 120 words. Recovery is possible
by changing the buffer size in the upper
half of pa - 19, setting the close file
flag by placing a nonzero value in bits
29-24. of pa - 12, and rerunning.

IOTBEG No output buffer address has been specified,
No recovery.

101134 An attempt has been made to continue writing
at a point other than the end of an exist-
ing file, with block size less than 240
words. No recovery.

I0DRU3 The buffer size specified is smaller than

25

26

20 II I0I87A The first block of the file is not a label

or sentinel block, since it does not con-
tain the sentinel word 757574757475. The
tape has not been properly positioned,
and recovery is not recommended. However,
setting bits 11-6 of pa - 26 to a nonzero
value and programing a L0CFIL may in some
cases allow continued processsing.

21 II IOI65 In a read forward operation a 50-word
EI sentinel block has been read, where a

label block of 120 or 240 words is
expected. See code 24o for possible
recovery.

22 II IOI65 The first block in a file is not a label
EI block in the LION format, since the flag

in bits 35-33 of the second word is equal
to zero. No recovery.

CENFOR 19-12

March 1970

19.5.2. LION ERROR CODES (Continued)
CODE USE ORIGIN

DESCRIPTION

Octal Decimal

27

34

35

42

43

44

23

30

24

II

31

25

EI

32

26

33

27

28

29

34

35

36

II

40

32

10

ITMOUT

41

33

EO

(1007)
(10012)

II 10 DATA This indicates a checksum error. A

recomputation from the data read in does
not agree with the checksum originally
recorded. This normally indicates equip-
ment malfunction, and recovery is not
feasible.

IOSEND Each of these error indications results
from detection of an invalid flag in a
sentinel or label block. No recovery.

I0DRU3 The buffer size specified is smaller
than the block read from drum.

I0I42A Opening file backward on UNISERVO IIIC
illegal. No recovery.

In an End-of-Reel operation, a request
to EXEC I for a rewind (code 32) or a
rewind with interlock (code 33) results
in an error status. This indicates either
equipment trouble or that the tape unit
is otherwise engaged. No recovery.

I0CHDR The file which is to be written has a
buffer length less than 240, and its
label block is 120 words in length.
This file can be written only at the
beginning of a tape, or following the last
existing file on the tape. The tape is
not properly positioned to meet these
requirements. No recovery.

I0CHDR When opening an output file, the tape
(I0014D) is positioned at a sentinel block, but
it is neither an End-of-File sentinel
nor the label block of the first file
on the tape. No recovery.

10 I0CHDR In attempting to write a file which is to
last block indicates that it is not an
End-of-File sentinel block. The tape is
therefore improperly positioned. No
recovery.

10

10

E0

March 1970

CENFOR 19-13

19.5.2. LION ERROR CODES (Continued)
CODE USE ORIGIN

DESCRIPTION

Octal Decimal

45

46

47

50

51

52

53

54

55

37

38

42

43

44

45

10 IOCHDR When opening an output file, the

EO (I0014A) preliminary rewind returned an error

status signal from EXEC I. This indi-
cates either equipment trouble or that
the tape unit was otherwise engaged.
No recovery.

10 IOCHDR When opening an output file , a read
backward operation during the pre-
liminary positioning of the tape
returned an error status signal from
EXEC I. This indicates either equip-
ment trouble or that the tape unit was
otherwise engaged. No recovery.

39 10 IOREPO To reposition the tape for a rewrite
EO of a block which has just been written

or read in a forward direction, the
tape must be moved back two blocks
and then forward one block. The move
is received from EXEC I. This is
almost invariably caused by equipment
trouble. No recovery.

IOREPO In attempting to reposition the tape
for overwriting, a backward read has
not been successfully completed. No
recovery.

IOREPO Failure to read a block after successful
repositioning described in error code 40.
No recovery.

40 10
E0

41 10

10 IOREPO Incorrect positioning of a tape at the
E0 beginning of a reel, probably due to

equipment malfunction. No recovery.

10 I0RHDR Incorrect positioning of an output tape
E0 at a label block or End-of-File sentinel.

No recovery.

10 I0RHDR Incorrect positioning of an input tape
E0 at a block which is not a label or EOF

sentinel block. No recovery.

11 I0187A While positioning the tape for a forward
EI read operation, an error status code has

been received from EXEC I. This is due
either to incorrect positioning or equip-
ment malfunction. No recovery.

CENFOR 19-14

March 1970

19.5.2. LION ERROR CODES (Continued)
CODE USE ORIGIN

Octal Decimal

56

57

60

61

62

66

67

70

46 II

47 II

48 II

49 10

50

54

55

56

10

63

51

io

CONWRI

64

52

EO

IMGOUT

IOXITM
I0PP2

65

53

10

OENFIL

EO

I0PP3

EI

EI

EI

DESCRIPTION

10175 During the search for a second BYPASS
sentinel, an error status code has
been received from EXEC I. No recovery.

CONWRI During the positioning of a tape for the
continue write function, an error status
code has been received from EXEC I. No
recovery.

IENFIL The attempt to terminate all outstanding
requests on this file has resulted in an
error status. No recovery.

CONWRI Omission of parameter cc in the CONWRI
macro specifies that the tape should be
positioned at a label block or EOF
sentinel block. The error code indicates
that the tape is not so positioned. No
recovery.

CONWRI A backward read operation in the

positioning for a continue write results
in an error status. No recovery.

Same as code 50 except that a forward
read caused the error. No recovery.

An attempt to punch a card or print a
line resulted in an error status signal,
No recovery.

An attempt to punch any one of the four
stop cards resulted in an error status
signal. No recovery.

I0PP4 With input on punched cards , an attempt
to condition the card read for Fieldata
input has resulted in an error status
signal. No recovery.

I0PP4 With input on punched cards, an attempt
to read a label card has resulted in an
error status signal. No recovery.

I0TES2 In attempting to type out, "LABEL CARD

WASN'T LOADED PROPERLY," an error status
signal was received from EXEC I. No
recovery.

March 1970

CENFOR 19-15

19.5.2. LION ERROR CODES (Continued)

CODE USE ORIGIN
Octal Decimal

72

100

101

105

106

107
110

DESCRIPTION

74-

60

75

61

76

62

58 10 IOCHDR During the process of repositioning the
EO IOOl^B tape after reading the last block

recorded in any preceding file, an attempt
to perform a contingency write operation
on a UNISERVO IIIA tape unit results in
an error status signal. No recovery.

10 I003CC Each of these errors occurs when LION

expects to read a sentinel block or label
on a IIIC prior to writing the file. No
recovery.

64 E0 IMGOUT An IMGOUT has been requested on an output

file that has not been opened. No
recovery.

65 EI IMGIN An IMGIN has been requested on an input

file that has not been opened. No
recovery.

The a-field of an output operation
parameter is zero. No recovery.

The a-field of an output operation
parameter is greater than 9. No recovery,

The number of output characters for a
floating point binary to fixed point deci-
mal conversion is greater than ten. No
recovery.

69 E0 IMGOUT In a floating point binary to fixed point

I0TAU6 decimal conversion, the number of digits
to the right of the decimal point is
greater than the output character count
minus 2. No recovery.

70 E0 IMGOUT In a floating point binary fixed point

I0TAV decimal conversion, the number of character
positions reserved for the integer portion
of the converted number is not large
enough to contain the generated integer.
No recovery.

71 E0 IMGOUT The floating point number is too great

72 I0TAR (code 71) or too small (code 72) for

floating point binary to floating point
decimal conversion. No recovery.

102

66

E0

IMGOUT

103

67

E0

IMGOUT

104

63

E0

IMGOUT
I0TAU6

CENFOR 19-16

March 1970

19.5.2. LION ERROR CODES (Continued;
CODE USE ORIGIN

DESCRIPTION

Oc tal Decimal

111

73 EO

112

74 EO

113

75 EO

1U

115

116

117

120

78

79

80

121

81

IOTAFA The attempted execution of an output

parameter operation has caused the total
number of characters going into the out-
put image to exceed the image size speci-
fied by parameter pt of the EOCON macro.
No recovery.

IMGOUT In a fixed point binary to fixed point
I0TB06 decimal conversion, the number of output

characters is greater than 12. No

recovery.

IMGOUT In a fixed point binary to fixed point
I0TB06 decimal conversion, the number of places
specified to move the decimal point to
the left, after conversion, is greater
than the number of characters which are
to be written. No recovery.

76 EO I0TBS2 In a fixed point binary to fixed point

decimal conversion, the number of char-
acter positions reserved for the integer
portion of the converted number is not
large enough to contain the generated
integer. No recovery.

77 EI IONAFA The attempted execution of an input

parameter operation has caused the total
number of characters read from the input
image to exceed the image size determined
by the input medium specified by parameters
pi and pk of the EICON macro. No recovery.

EI IMGIN An input character is not a valid
IONAP Fieldata number. No recovery.

EI IMGIN The exponent of a floating point number
IONAR does not fall within the range of -38
to + 39. No recovery.

EI IMGIN The number of places that the decimal

I0NAV2 point is to be moved to the right, before
conversion, has exceeded the limit 10-1.
No recovery.

EI IMGIN In a fixed point decimal to fixed point
IONAY binary conversion, the number of bit

positions reserved for the integer por-
tion of the converted number is not great
enough to contain the generated integer.
No recovery.

March 1970

CENFOR 19-17

19.5.2. LION ERROR CO DES (Continued)
CODE USE ORIGIN

Octal Decimal

122

123

124

82

83

84

EI

EI

EI

IONTES

IONAL
IONAM

IONBCA

DESCRIPTION

The first input character of a number
whicn is to be converted is neither a
sign nor a space. No recovery.

The number of input characters for any
of the following conversions is too
great: floating point to floating point,
floating point to fixed point, or fixed
point to fixed point.

The octal character for either the
octal or BCD transfer is incorrect.

140

96

141

97

14.2

98

THE FOLLOWING ERRORS OCCUR ONLY IN FILES USING THE FIXED BLOCK UNISERVO
IIA TAPE FORMAT:

10 OPNOUT An attempt has been made to open an

already open output file. No recovery.

10 OPNOUT The label image for an output file is
too long. No recovery.

10 ITMOUT An output item has been presented to a
closed file, or to a file demanding a
close file calling sequence. No
recovery.

10 0ENFIL An attempt has been made to close an

already closed output file. No recovery.

10 0ENFIL A backward read operation in closing a

file has not been completed normally.
No recovery.

11 0PNIN An attempt has been made to open an

already open input file. No recovery.

II 0PNIN An error has been detected in the initial
forward read of a label block. No
recovery.

II ITMIN An input item has been requested from a
closed file , or from a file demanding a
close file calling sequence. No
recovery.

II IENFIL An attempt has been made to close an

already closed input file. No recovery.

143
144

145
146

147

99

100

101

102

103

151

105

CENFOR 19-18

March 1970

19.5.2. LION ERROR CODES (Continued) FIXED BLOCK UNI SERVO HA
CODS USE ORIGIN DESCRIPTION

Octal
152

153

155
156

160
161
162

163

166

Decimal
106 10 ITMOUT

107

112

113

114-

115

118

10 ITMOUT

108 II ITMIN
10 ITMOUT

109 II ITMIN

110 10 ITMOUT

II IOHSKP

II IOHSKP

10

10 ITMOUT

10

IO-II

ITMOUT

167

119

IO-II

170

120

IO-II

171

121

IO-II

172

122

IO-II

A backward read in checksumming an
output tape has not been successfully
completed. No recovery.

A backward read of the last data block
in checks umrning an output tape has been
successfully completed. No recovery.

The rewind after the typeout following
a checksum operation has not been
completed normally. No recovery.

The check read of a tape has not been
completed normally. No recovery.

A backward read of the label block in
checksumming an output tape has not
been successfully completed. No
recovery

An incorrect version of LION has been
called for. No recovery.

The item size for the file is not a
factor of 120. No recovery.

After a write error, an attempt to move
the tape backward has indicated another
error, other than an end-of-file. No
recovery.

Tape positioning error in a write
operation. No recovery.

The file data area being requested is
occupied by a previously opened file.
The number of opened files exceeds 20.

When opening a file one of the required
arguments was not present.
The peripheral equipment definition is not
a legal value.

In an item read or write, a close reel or file,
or an ITMRTN statement, the file data area
requested is not defined.

March 1970 CENF0R 19 _ 19

19.5-3. JOB REQUEST ERROR CODES

An error in the job request format will cause one of the following
messages to be typed on the console printer in one of the following
forms :

SPA*JRID*AERnn or INTASP-JRIIFAERnn

The error codes, ERnn, and their description are as follows:

ER1 Job request identity of current job too long. Message shows
previous job request ID

ER2 Card type field too long

ER3 Illegal card type

ER4. PM cards out of order

ER5 TAL name too long

ER6 TAL number too long or illegal character on the TAL card

ER7 Illegal character on TRN card

ER8 TRN field too long

ER9 FAC name too long

ER10 Reserve on more than one card

ER11 Illegal facility requested

ER12 Illegal character on FAC

ER13 Illegal sequence on FAC

ER14 FAC asked for too large a core block

ER15 Two FAC card FACILITY REQUIREMENT fields contain asterisks

ER16 Job program name too long

ER17 Illegal character or sequence on PTY

ER18 Illegal number of characters in some field on PTY
(Type of Run is indicated as REAL-TIME)

ER19 Rerun but no absolute units on PTY

ER20 Card count on PTY and cards in job do not match

ER21 PTY cards out of grouping
ER22 FAC cards out of grouping

CENFOR 19-20 March 1970

19.5.3. JOB REQUEST ERROR CODES (Continued)

ER23 TAL cards out of grouping

ER24 TRN cards out of grouping

ER25 First card of new Jrid is not a PTY card

ER26 Duplicate request ID

ER27 No IBANK specified on FAC card

ER28 Illegal RUSH field on the PTY card or FAC card is not the
second card of the job request

ER29 Job request core storage table filled

ER30 PM number is not a numeric

ER31 Matched priority and precedence of a job in schedule but
no sequence number on new job

ER32 Matched priority and precedence of a non-sequence job

ER33 Priority and precedence of Z63 but not a permanent job

ER34 FAC card ended with colon but next card is not FAC and
starting with a tag field

ER35 Configuration cannot satisfy FAC request

ER36 "Program Medium" or "Library Medium" field of PTY is not part
of configuration

ER37 Period at an illegal point on any card of the job request

ER38 Library input tape symbol of "input Medium" field on PTY

card equated to a program symbol and TRN card specifies the same
program symbol as a unit to be transferred to another job

ER39 SUB cards not grouped together

ER40 SUB card field has new name but no old name

ER41 Subroutine name or entry point shown on SUB card is longer
than six characters

ER42 Illegal absolute channel and unit in AB field on FAC card

March 1970 CENFOR 19-21

19.5.3. JOB REQUEST ERROR CODES (Continued)

ER4-3 None, or more than one, unit tag in AB field on FAC card

ERA 5 *JRID* (PTY full)

ER4-6 *JRID* (REQT full)

ER47 PM. card missing

CENFOR 19-22 March 19?0

Error or warning conditions other than those connected with
insufficient facility requests may be detected during the
the operator is informed by a message on the console printer
of the form:

LD - ;; "jrid" ER nn or LD ^jrid* WAR nn

where nn is a two-digit error or warning code. The ER message

The warning or error codes follow:

00 Error in format or read of ROC program file

01 First block of program file not a label block

02 Checksum error on reading program file

03 Attempted to assign a segment storage drum table via a
transfer, or to transfer the assignment of a segment
drum table to a succeeding program

04 Not EXEC ROC program

05 Table length modification not allowed

06 Jump switch cannot be deleted

07 I/O facility cannot be deleted

10 Illegal systems reference in main program

11 Nonrecoverable I/O condition

12 Machine or peripheral equipment error

13 Program file does not contain symbol of drum table
being transferred to program

11+ Program file does not contain symbol of drum table

requested for transfer to a succeeding program

15 Program file does not contain symbol of 1/0 facility being
transferred to program

16 Program file does not contain symbol of I/O facility
requested for transfer to a succeeding program

17 I/O facility requested for transfer to a succeeding
program was deleted

20 Table (DALL) containing drum table assignment full, cannot
transfer drum table to succeeding program

21 Requested DBANK area too small

22 Requested IBANK area too small

23 \$PARAM table too small

24. Segment storage tape assigned to same unit as main or
subroutine program file

25 No DBANK requested for load of a complex program

26 S ibroutine requested segment storage

27 Tape from which subroutines are to be loaded is not a
library tape

30 Library tape format error

31 Library directory too large for 2K buffer supplied by

32 Subroutine or external reference not in library directory

March 1970 CENFOR 19-23

33 Total drum area requested not enough to include segment

storage
34- Attempted to transfer more than one I/O facility or

drum table to same symbolic reference in program

library

36 Subroutine medium not defined

37 Subroutine jump switch not defined in main program
40 Unable to assign subroutine i/O facility

4-1 Illegal systems reference in subroutine

4-2 Subroutine drum or core table not defined

4-3 Subroutine drum or core table longer than length of

corresponding table of main program
44 Subroutine IBANK or DBANK longer than length given in

INFO block of library
4-5 Warning, unable to make all table length changes specified

on TAL card
4-6 Segment storage medium deleted
47 Attempted to transfer to an independent drum table, a

drum area less than the area specified in a dependent

table (a dependent table is one which has the same

starting address as an independent one)

50 Core table length increment on TAL card too large
(16-bit sum is less than original length)

51 Requested \$ERR0R table length greater than length
fixed by EXEC (97)

52 The segmented main program cannot be loaded from the
subroutine library tape

53 Insufficient drum available to copy the main program
from the subroutine library tape

54 Insufficient number of units requested on the logical
channel zero

55 Assignment of an absolute facility changed from available

56 Equipment type in modification record differs from
equipment type of an absolute facility or a facility
being transferred in

57 No subroutine medium defined and not all subroutines
are being deleted by a SUB card

60 Too many entry /exit points to subroutine

77 Tape-to-drum copying of a library is using a block of

of a selected program.

Before replying to the CPY-MORE, the suspended program

that particular program. Also may indicate cross bank

CENFOR 19-24 March l97Q

19.5.5. EXEC I/O ERROR MESSAGES

Format: I/O ERR *mm*-Ccc-Uuu-Du-Aaaaaaaaa-Fff-Ffff-Gff-Xii-Txxyyzz-b

b- N706024
N706054-
N004445

All fields which would appear as shown above : usually only 3 or 4 fields
are present in an I/O error typeout. If the message originates from the
I/O Error Logging, ER is replaced with LOG. (see below)

mm - message number indicative of the condition of the error

Ccc - channel (decimal)

Uuu - unit number (decimal)

Du - drum unit number

Fff - most recent external function transferred (Ffff for

Uni servo IV)
Xii - interrupt code

Gff - nonsense interrupt (message # 15)
ii(from Xii) ii - 01 input monitor

ii - 02 output monitor

ii - 03 function monitor

all other - except interrupt code

Txxyyzz - error count for the tape which has just rewound on the channel
and unit shown.

xx - 70 EI Counts - IIA, IIIA

yy - 60 EI Counts - IIA, IIIA

yy - 44 (READ) EI - IVC

zz _ 24 EI Counts (IIA)

zz - 54- EI Counts (IIIA) - write only

zz - 44 EI Counts (IVC) - write only

N706024 - IIA The interrupt codes shown in the message have reached
N706054 - IIIA the limit for the tape UNIT shown. Message format
N004445 - IVC Is for the read error count, and the 45 is for the

write error count.

External Interrupt Codes Displayed by I/O Error Messages :

Magnetic Tape

20 - Sequence error; CS

24 - Sequence error (two block read); CU

30 - Character-count; CS

50 - Illegal function (34 code on IVC)

54 - Tape unit select error; Write error (IVC)

60 - Parity error; CU

70 - Character-count; CU

74 - Interlock

44 - Write error (IVC)

March 1970 CENFOR 19-25

19.5.5. EXEC I/O ERROR MESSAGES (Continued)

External Interrupt Codes Displayed by I/O Error Messages (Continued)

Magnetic Drum

06 - Parity error in overflow address

07 - Parity error not during continuous read
14 - Write fault

20 - CS sequence error

30 - CS character-count error

50 - Illegal function

60 - CU sequence error

64 - Parity error during continuous read

70 - CU character-count error

54 - Illegal address - either program or machine produced

Cards

20 - CS sequence error

30 - CS character-count error

50 - Illegal function

70 - Illegal character

74 - Interlock

High Speed Printer

50 - Illegal function
54 - Unit Select error
74 - Interlock

Paper Tape

01 - Punch compare error

02 - End of paper tape or tape motion error

Function Codes Displayed by I/O Error Messages :

Magnetic Tape

IIA (fixed block mode)

Search Tape Forward - 56

Search Tape Backward - 76

Read Forward with Sentinel Check - 53

Read Backward with Sentinel Check - 73

Move Tape Forward - 51

Move Tape Backward - 71

Write Tape at Low Density - 03

Write Tape at Low Density - 04

Rewind Tape - 20

Rewind Tape with Interlock - 21

CENFOR 19-26 March 19?0

19.5-5. EXEC I/O ERROR MESSAGES (Continued)

Function Codes Displayed by i/O Error Messages : (Continued)
Magnetic Tape (Continued)
II IA (with interrupt)

Write one block 12.5 KC - 11

Write one block 25 KC - 12

Read Forward one block (low) - 51

Read Forward one block (Norm) - 52

Read Forward one block (High) - 53

Read Backward one block (low) - 71

Read Backward one block (Norm) - 72

Read Backward one block (High) - 73

Search Read Backward (low) - 75

Search Read Backward (Norm) - 76

Search Read Backward (High) - 77

Rewind - 30

Rewind & Interlock - 31

Terminate - 33

Bootstrap - 50 rxEC _ Hardvare

IVC

200p.p.i.

556p.p.i.

800 p.p

Write Binary

01-130

02-120

65-120

Write BCD

05-132

06-122

71-122

Write BCD/Translate

27-132

30-122

75-122

Write EOF

03-133

04-123

70-123

37-530

42-520

66-520

40-530

43-520

60-520

44--570

46-560

74-560

47-532

52-522

72-522

50-532

53-522

62-522

54-572

56-5^2

67-562

31-532

33-522

73-522

32-532

34-522

63-522

35-572

36-562

76-562

Backspace Block

61-303

Backspace File

64-313

Rewind

20-301

Rewind/interlock

21-311

Skip While Erasing

10-103

Remove Logical Interlock

07

Terminate Function

23

March 1970 CENFOR 19-27

19.5.5. EXEC I/O ERROR MESSAGES (Continued)

Function Codes Displayed by i/O Error Messages : (Continued)

Magnetic Drum

02 - Write Continuously

23/33 - Terminate

40/50 - Bootstrap

52 - Read Block & Term EOB

45 - SRH; FIND; Term SRH -

Cards rn T ,

51 - Input

52 - Input

53 - Input

70 - Input

71 - Input

72 - Input

73 - Input

74 - Input

XFER 1

XFER 1, Trip Fill

Trip 1

Select Stacker 1

Select Stacker 2

Enable Translate

High Speed Printer
12 - Print
33 - Terminate

Paper Tap

=1

04 -

Punch On

05 -

06 -

CPR/Error Cl

07 -

Punch Off

08 -

00 -

01 -

02 -

Fault

03 -

Master Clear

CENFOR 19-28

March 1970

19.5.6. TERMINATION CODES

Upon occurrence of the conditions listed below, the EXEC performs
an error termination of the job program and provides a typeout
to identify the packet of instruction address causing the error.
The error codes listed below are included in the typeout.

The format of the EXEC termination as shown on termination log
is as follows:

EXEC///time EXEC TER *jrid* (the last re-entry point for
the program)
ERROR CODE
1. Illegal jumps and interrupt lockout

Octal code
00
75
77

Meaning

Program has executed a jump or return

Program has jumped to an interrupt

location

Manual termination of program in

instruction loop or in loop with

interrupts disabled

2. Internal error interrupt

Octal code

01
02
03
05
06
07
51

52

55

56

57

61

65

Meaning

Illegal operation
Trace Mode
Memory lockout
Characteristic underflow
Characteristic overflow
Divide overflow
Illegal operation and illegal
Trace mode and illegal recovery
Characteristic underflow and illegal
Characteristic overflow and illegal
Divide overflow and illegal recovery
Illegal trace mode set in area other
than current program or EXEC entrance
EXEC termination because " ;; -jrid*
exceeded run time

For nonrecoverable error interrupt conditions, the appropriate
code and P register setting are stored in the B0 film image for
the terminated program.

March 1970 CENFOR 19-29

19.5.6. TERMINATION CODES (Continued)
COMMUNICATIONS

Octal Code Meaning

11 Exceeded number of packets allowed for

chain

12 Packet or buffer address outside of

program limits

14- Illegal unit or channel select

15 Illegal function code

For communications error conditions, the appropriate code and
packet address are stored in the BO film image for the termi-
nated program.

PROGRAM RELEASE

Octal Code Meaning

16 Illegal release (test instruction

error)

17 No outstanding requests at time of

release

76 Job program has tested an illegal

packet before releasing control to
\$WAIT1

For program release error conditions, the return address from
the Bl register and appropriate code are stored in the BO film
image for the terminated program.

l/0_

The i/O error termination codes for those persons using
EXEC i/O can be found in the Executive I manual, Appendix F.

Octal Code ,,

r, , Meaning

/4 One or more words of a transfer by

the Q0 register lies outside the core
area assigned to the job program.

CENFOR 19-30 March l9?0

19.5.7. SORT ERROR CODES

ERROR

NUMBER ERROR DESCRIPTION

00 Overlay segment not read from drum properly.

01 Input label checking requested but label not
supplied in schedule for checking.

02 Total of individual key sizes specified on PM1
does not equal the total key size specified on
is being executed, error 12 is typed out as
error 02.

03 Some error was determined in the parameter cards.

04 Parameter for type of input media not a legal
code.

0\$ UNISERVO HA tape unit specified as input but
no HA tape units assigned by EXEC.

06 UNISERVO IIIA tape unit specified as input but
no IIIA tape units assigned by EXEC.

07 UNISERVO IIIC tape unit specified as input but
no IIIC tape units assigned by EXEC.

08 No input media was specified by this parameter
decode routine.

09 Number of UNISERVO HA tape units and UNISERVO IIIC
tape units specified by PMO does not equal amount
assigned by EXEC.

10 Number of UNISERVO IIIA tape units specified by
PMO does not equal amount assigned by EXEC.

11 Non-numeric character in field being converted
from Fieldata to binary, parameter decode.

12 External format specified as input but item size
not correct. Must be 11+ or 22.

13 Item size too large to be sorted with this amount
of core.

14. Did not complete change tape typeout properly;

an answer other than Y or YES was returned to the
change tape typeouts (input tape; final output).

March 1970 CENFOR 19-31

19.5.7. SORT ERROR CODES (Continued)

ERROR

NUMBER ERROR DESCRIPTION

15 Not enough core is available to handle this type of
intermediate storage, because buffer size is below
lower limit (120 words).

16 Tapes used as intermediate storage, but not enough
core has been assigned to handle all required
buffers.

17 Number of tapes specified for merge is greater
than the amount of UNISERVO tape units available.

18 Sequence error during Cascade Merge; previous winner
was locked and still chosen as winner.

19 Sequence error during Cascade Merge; core location
was locked and still chosen as winner.

20 Level count error detected. Maximum number of
levels in merge tournament has been exceeded.

21 Sequence error on final output.

22 Merge cannot handle all strings on the drum.

23 Error detected in preparations for handling
strings In a partial collation.

21+ Error in partial collation.

25 Error detected in Cascade Merge. Attempt to merge
more than the available number of tapes.

26 Error detected in attempting to merge more strings
than available during partial collation.

27 Last pass of merge has detected that there are
no strings to be merged.

28 Error on converting Fieldata to binary, entire
card or field missing, parameter decode routine.

29 EOF exit was taken when the first item was requested
from a filo.

CENFOR 19-32

March 1970

19.5.7. SORT ERROR CODES (Continued)

ERROR
NUMBER

31

32
33

34
35
36
37
38
39
40

41
42

43

44

45
46

47

48
49

50
51

ERROR DESCRIPTION

Input item size does not correspond to item size
on parameter card.

Error typeout not completed properly.

The sign of the numeric key is not a Fieldata +, -,
or space.

Illegal key tape
Illegal function
Trace mode
Memory Lockout
Not used

Character underflow
Character overflow
Divide overflow
Not used

> EXEC \$ERR0R Table

Too many instructions have been generated for
Pack and Unpack.

Total key from PMO does not equal total of keys
on PM1.

IBM key format not available.

File name of PM3 and PM6 cards (external format)
and tape do not match.

Reel number on PM3 and PM6 cards and tape do not
match.

Non-numeric reel number on PM3.

PM6 card present when none allowed, or missing
when IIA output.

Spaces in reel number when reel number is to be
checked.

Non-numeric reel number on output.

March 1970 CENFOR 19-33

19.5.7. SORT ERROR CODES (Continued)

ERROR

NUMBER ERROR DESCRIPTION

52 First internal error interrupt (unassigned) .

53 No items entered into Sort.

5-4 Illegal parameter (2) on indication of output
for external and special external format.

55 Drum only specified, but back up tapes are needed,

56 Call was made on OCFP or OCLP in the SORTN
version which does not allow Own Coding.

57 The output media specified on PMO were not
assigned to the program.

63 A key specified on the PM1 card extends beyond
the length of the item.

64. Duplicate entry on PM2 card.

65 Drum is specified for intermediate storage
but no drum table is defined.

66 Drum is specified for final output but no drum
table is defined.

67 Tape units are needed as intermediate storage and
none are assigned, or not enough tapes.

68 Key fields on PM1 card overlap.

69 No input tape assigned.

76 Error on input positioning of multi-file input.

77 End of tape (IIA internal format)

90 or 128 Non-alpha/numeric on PMO or PM1. (00-77)

91 Merge did not allow enough core for 2 buffers
per input and 2 buffers per output file.

92 PM2 is used but total bits are not divisable by
six.

CENFOR 19-34 March 19?0

19.5.8. ELF ERROR CODES

CODES DESCRIPTION

02 Checksum Error

03 Machine or peripheral equipment error
04. Drum write error

06 Tape write error

10* Drum STABP or ENTRYP not long enough
(See next page)

12 Element is not RB

13 Illegal INFO statement

14 Drum logical channel not available

15 FASTRAND not available

20 Name on control card contains a space

21 Element card format error

22 Element does not contain a preamble

23 Too many characters in a name or control card

24 Control card format error

25 PREAMB core table overflow

26 No valid preamble cards (col 1 neg - element
skipped)

27* CRBTLS drum table overflow

30""- DRMPOS drum table overflow

31- DELETE core table overflow

32* STAB core table overflow

33* ENTRY core table overflow

34 SUB core table overflow

35 ENT core table overflow

36 RB entry point not in ENTRY table
37* CRSRF table overflow

40* PROGF table overflow

41 Translation error

42 Entry not in STAB table

43 GSEO table overflow

44 SYS table overflow

45 Element name not an entry point
46* PREAMB table overflow (printing)
47 More than one Map card

50 Reference not defined

51 Right half modification not allowed

52 Left half modification not allowed

53 12 bit modification not allowed

54 I/O table overflow

55 Drum table overflow

56 Core table overflow

57 JS table overflow

March 1970 CENFOR 19-35

19.5.8. ELF ERROR CODES (Continued)
CODES DESCRIPTION

60 No ROC input tape assigned

61 Alternate ROC input tape assigned and
main ROC input not assigned

62 ROC label block checksum error

63 ROC first block not label block
66 ROC block not 256 words

67-"- CRSRF table overflow

70" Preamble table overflow (Library Directory)

71 Too many entry points (more than 50 entry

points in element)

72* PLTAB table overflow

73 Illegal equipment type

74. IB, DB, or data table over 65K

- ;; "Errors marked - "" in the above list are recoverable through
rescheduling. An increase in table length (either core or
drum) is required. This is done by a use of a TAL card in the
Job Request for ELF. The following table lists those errors
which are of the recoverable nature.

CODES

10
xy

27

30

31

32

33
xx

37 or 67

4.0

46 or 70

72

x If the length of ENTRYL (core) is increased by an increment
at load time, it is also necessary to lengthen ENTRYP (drum)
by the same increment.

y If the length of STABL (core) is increased by an increment
at load time, it is also necessary to lengthen STABP (drum)
by the same increment.

TABLE TYPE

LENGTH TAG

DRUM

STABP or E

DRUM

CRBTL

CORE

DRUMPSL

CORE

DELETL

CORE

STABL

CORE

ENTRYL

CORE

CRSRFL

DRUM

PROGFL

CORE

PRE

CORE

PLTABL

CENFOR 19-36 March 1970

19.5.9. FILE CONTROL ERRORS

All file control errors will be displayed on the console
typewriter in the format: File-name FC ERR XXX

where XXX is the value associated with the particular error.
A complete list of file control errors is in the LION - General
Reference Manual, UP-2581, Rev. 2.

After the typeout has been displayed, LION will either terminate
the run or return control to the object program. This action
is determined by the open file statement.

The following LION file control errors have no recovery pro-
cedures available to the FORTRAN program. These errors when
detected will result in termination via EXEC \$ERR.

F. C. ERR CODE DESCRIPTION

5 An attempt to perform a CALL ITMOUT statement
has been made, the file closed or demanding

a CALL OENREL operation.

6 An attempt to perform a CALL ITMIN statement
with the file not yet opened, or when a
CALL IENFIL or IENREL is the only legitimate
operation.

7 An attempt has been made to execute the
End-of-Reel procedure on a closed input
file.

8 An attempt has been made to execute the
End-of-Reel procedure on a closed output file.

118 The file data area being requested is occupied
by a previously opened file.

119 The number of opened files exceeds 20.

120 When opening an output file, one of the
required arguments (A,B,C or E) was not pre-
sent. For opening an input file (A,B,C, or D)
was not present. For ITMIN (A,B, or C) is
not present. For ITMOUT (A or B) is not
present. For any other operations, Argument A.
is not present.

121 The peripheral equipment definition is not a
legal value. (Peripheral definitations are
defined in NTAB\$)

122 In an item read or write, a close reel or file,
or an ITMRTN statement, the file data area
requested is not defined.

March 1970

CENFOR 19-37

19.6. CHANNEL ASSIGNMENTS

19.6.1. CENSUS 1107 CHANNEL ASSIGNMENTS — 1107A and 1107B

The following are the i/O channel assignments as of this date
for the Census 1107:

Site A = 07 B = 12

Periph e ral Unit
FH-880 Drum

Fastrand Mass Storage

Paper tape Subsystem

High Speed Printer
Console

Channel

No.

of

Assignment

Unit

s

2

1

2

2

2

3

2

5

3

6

"

- same units

7

7-

8

7-

1— same units

9

7-

J

11 -

1

11 -

8

1

punch

11 -

9

1

labeier

12

1

13

1

15

1

CENFOR 19-38

March 1970

19.6.2. CENSUS 1108 CHANNEL ASSIGNMENTS — 1108C

The following are the I/O channel assignments as of this date for
the Census 1108C:

Site A3

Peripheral Unit
FH-432 Drum

FH-1782

FH-880 Drum

Fastrand Mass "Storage

Paper tape Subsystem

High Speed Printer
Console

Channel

Assignment

1

2

3

U

5

6

7

8

9

11-0
11-8
11-9

12

13

15

No. of
Unit

2
1
2
2
2
2

H

_ same units

]-

same units

1 punch
1 labeler

1

1

1

March 1970

CENFOR 19-39

19.6.3. CENSUS 1108 CHANNEL ASSIGNMENTS — 1108D

The following are the I/O channel assignments as of this date
for the Census 1108D:

Site 37

Peripheral Unit
FH-432 Drum

FH-1782 Drum

Fastrand Mass Storage

Paper tape Subsystem

High Speed Printer
Console

Channe"

Assignme

:nt

No. of
Units

2

1

1

2

2

2

3

2

5

3

6
7

°1

- same units

0-»

8
9

- same units

11 -

11 -

8

1 punch

11 -

9

1 labeler

12

1

13

i

15

l

* Channel (6) must be downed after booting on this machine.

CENFOR 19-40

March 1970

19.7. UNIVAC 1107 STANDARD CODE TRANSLATION

UNIVAC 1107

FTftTDATA

» 1 M

^UMI

if V.VJL/

t 1 HMM

JLA 1 IV.

/M

OCTAL
CODE

1107 HSP
CHARACTER

COOING
SYMBOL

KEY

PUNCH

NAME

MONITOR

OCTAL
CODE

XS3

CHARACTER

NAME

KEY-BOARD

PRINTER

00

@

@

7-8

at

~

(IGN)

00

ir

ignore

01

[

[

12-5-8

left bracket

UC

\

01

A

space

02

]

]

11-5-8

right bracket

LC

V.

02

-

minus

03

f

t

12-7-8

number sign

LF

(L.F.)

03

04

A

A

11-7-8

delta

Return

(CR.)

04

1

05

(blonk)

blank or b

space

Space Bar

(Space)

05

2

06

A

A

A

12-1

A

A

06

3

07

B

B

B

12-2

B

B

07

4

10

C

C

C

12-3

C

C

10

5

11

D

D

D

12-4

D

D

11

6

12

E

E

E

12-5

E

E

12

7

13

F

F

F

12-6

F

F

13

8

14

G

G

G

12-7

G

G

14

9

15

H

H

H

12-8

H

H

15

'

apostrophe

16

1

±

1

12-9

1

1

16

&

ampersand

17

J

i

J

11-1

J

J

17

(

left
parenthesis

20

K

K

K

11-2

K

K

20

t-

multiline

21

L

L

L

11-3

L

L

21

/

comma

22

M

M

M

11-4

M

M

22

period

23

N

N

N

11-5

N

N

23

;

semicolon

24

O

O.

O

11-6

24

A

25

P

P

P

11-7

P

P

25

B

26

Q

Q

Q

11-8

Q

26

C

27

R

R

R

11-9

R

R

27

D

30

S

1

S

0-2

S

S

30

E

31

T

T

T

0-3

T

T

31

F

32

U

U

U

0-4

U

U

32

G

33

V

V

V

0-5

V

V

33

H

34

w

w

w

0-6

w

w

34

1

35

X

X

X

0-7

X

X

35

#

number sign

36

Y

Y

Y

0-8

Y

Y

36

*

cent

37

Z

Z-

z

0-9

Z-

I

37

®

FF1

March 1970

CENFOR 19-4.1

19 - 7 - UNIVAC 110 7 STANDARD CODE TRANSLATION (CONTINUED)

40

)

)

H

12-4-8

right
parenthesis

)

)

40

*■

tab

41

-

-

-

11

minus

-

-

41

H

quote

42

+

+

&

12

plus

+

+

42

1

FF2

43

<

<

12-6-8

less than

<

<

43

)

right
parenthesis

44

=

=

1

3-8

equals

=

=

44

J

45

>

>

6-8

greater than

>

>

45

K

46

&

&

2-8

ampersand

-

-

46

L

47

\$

s

\$

11-3-8

dollar sign

s

\$

47

M

50

*

*

*

11-4-8

osterisk

*

*

50

N

51

(

(

%

0-4-8

left
parenthesis

(

(

51

52

X

%

0-5-8

percent

"

••

52

P

53

5-8

colon

53

Q

54

■>

■}

12-0

question

mark

■>

■>

54

R

55

]

;

11-0

exclamation
point

\

[

55

\$

dollar sign

56

/

'

/

0-3-8

comma

'

/

56

«

asterisk

57

\

\

0-6-8

left slash

57

?

FF3

60

60

Z

printer stop

61

1

1

i

1

1

1

61

B

break- point

62

2

2

2

2

2

2

62

colon

63

3

3

3

3

3

3

63

+

plus

64

4

4

4

4

4

4

64

/

slash

65

5

5

5

5

5

5

65

s

66

6

6

6

6

6

6

66

T

67

7

7

7

7

7

7

67

U

70

8

8

8

8

8

8

70

V

71

9

9

9

9

9

9

71

W

72

;

ii

@

4-8

apostrophe

I

t

72

X

73

;

;

11-6-8

semi- colon

;

i

73

Y

74

/

/

0-1

right slash

/

/

74

Z

75

12-3-8

period

75

%

percent

76

n

n

0-7-8

lozenge

SPEC

a

76

=

FF5

77

(stop)

i

•-2-8

+

t

77

Not Used

(1CN) = Ignored

(C.R.) = Carriage Return

(F.F.i= Fast Feed
(L.F.) = Line Feed

0-3-S ~ Comma
4-8 = Apostrophe

CENFOR 19-42

March 1970

19.8. BCD. EXCESS-THREE CODES

Numeric
Bits

00

01

10

11

0000

i
5 00

r
E 20

t

N 40

V 60

0001

A

6 01

i

21

41

W 61

0010

02

• •

22

/

P 42

•

62

0011

03

•

y

23

)
43

+
63

0100

1

04

A
24

J
44

4*

0101

2
05

B
25

K
45

s

65

0110

3

06

C
26

L
46

T
66

0111

4
07

D
27

M
47

U
67

1000

5
1°

E
30

N
50

V
70

1001

6
11

F
31

51

W
71

1010

7
12

G
32

P
52

X
72

1011

8
13

H
33

Q
53

y

73

1100

9
14

I
34

R
54

Z
74

1101

i

15

#
35

\$
55

%
75

1110

&
16

C 36

*
56

T 76

1111

(
17

@
D 37

?

M 57

NOT
USED

FIELDS

Zone Bits

HIGH SPEED PRINTER

PRINTING

Normal: Prints Field 1 except
for non-printing characters
(see Computer Digit).
Computer Digit; prints Field 1
for printing characters;
Field 2 for non-printing
characters .

ACTION

@ Fast Feed Symbol 1

/ Fast Feed Symbol 2

? Fast Feed Symbol 3

= Fast Feed Symbol 4

r Multi-line Symbol

i Printer Ignore

A Printer Space

3 Breakpoint Stop

£ Printer Stop

NOTE: The numbers in the lower
right hand corner of each
box are the octal equivalen
of the XS-3 character.

March 1970 CENFOR 19-43

19.9. TABLE OF POWERS OF 2

TABLE OF POWERS OF 2

2 n n 2~"

1 1.0

2 1 0:5
4 2 0.25
8 3 0.125

16 4 0.062 5

32 5 0.031 25

64 6 0.015 625

128 7 0.007 812 5

256 8 0.003 906 25

512 9 0.001 953 125

1 024 10 0.000 976 562 5

2 048 11 0.000 488 281 25

4 096 12 0.000 244 140 625

8 192 13 0.000 122 070 312 5

16 384 14 0.000 061 035 156 25

32 768 15 0.000 030 517 578 -125

65 536 16 0.000 015 258 789 062 5

131 072 17 0.000 007 629 394 531 25

262 144 18 0.000 003 814 697 265 625

524 288 19 0.000 001 907 348 632 812 5

1 048 576 20 0.000 000 953 674 316 408 25

2 097 152 21 0.000 000 476 837 158 203 125

4 194 304 22 0.000 000 238 418 579 101 562 5

8 388 608 23 0.000 000 119 209 289 550 78125

16 777 216 24 0.000 000 059 604 644 775 390 625

33 554 432 25 0.000 000 029 802 322 387 695 312 5

67 108 864 26 0.000 000 014 901 161 193 847 656 25

134 217 728 27 0.000 000 007 450 580 596 923 328 125

268 435 456 28 0.000 000 003 725 290 298 461914 062 5

536 370 912 29 0.000 000 001 862 645 149 230 957 031 25

1 073 741 824 30 0.000 000 000 931 322 574 615 478 515 625

2 147 483 648 31 0.000 000 000 465 661 287 307 739 257 812 5

4 294 967 296 32 0.000 000 000 232 830 643 653 869 628 906 25

3 589 934 592 33 0.000 000 000 116 415 321826 934 814 453 125
17 179 869 184 34 0.000 000 000 053 207 660 913 467 407 226 562 5
34 359 738 363 35 0.000 000 000 029 103 830 456 733 703 613 281 25

68 719 476 736 36 0.000 000 000 014 551 915 228 366 851 806 640 625

137 438 953 472 37 0.000 000 000 007 275 957 614 183 425 903 320 312 5

274 877' 906 944 38 0.000 000 000 003 637 973 807 091 712 951 660 156 25

549 755 813 888 39 0.000 000 000 001818 989 403 545 856 475 830 078 125

CENFOR 19-44 March 1970

19.10. CAPACITY OF TAPES WRITTEN WITH FOLION

IIA TAPES

The block limit is 5000 data blocks.

A block contains 120 words.

The total word capacity is 600,000.

I IIA TAPES

There is no specific block limit. Data is written until end-of-tape
or a programmed end-of-file sentinel.

Recording is 200 words per inch with .75 inch interblock spacing.
An 1800' reel with block size of 605 may contain approximately
5000 blocks or 3,000,000 words of data.

March 1971

CENFOR 19-45

19.11. STANDARDS FOR OPERATION AND USE OF UNI VAC 1107 SYSTEM

Analysis of facility requirements of computer programs utilizing the
Univac 1107 system indicates that certain additional facility allowances
on the system's ability to undertake multi-program concurrent operations.

Facility allowances

The initial standards for 1107 computer use, dated June 4, 1963, are
modified, therefore to provide the following maximum allowances for indi-
vidual programs using the 1107 under the circumstances indicated.

Program Type

1. Production programs
other than sorts

Core Storage

26 blocks
(53,2^8 words)

2. Sorts with no additional 26 blocks
option coding outputs (53,24-8 words)

option coding outputs

26 blocks
(53,248 words)

Drum Storage
1,000,000 words
1,000,000 words
1,000,000 words

vine

IIIA

IIA

IVC

1/

2/

6

1

1

6

1

1

6

1

1

It should be noted that sorts which depend upon the maximum drum storage
allowance of 1,000,000 words may, on occasion, have to be run with
reduced drum facility if one of the FH-880 drums is out of service. If
the volume being sorted at the time requires the maximum drum storage
allowance to eliminate extra merge passes, the running time will be
increased during the operation with the reduced drum facility.

Run size

Normally, a maximum of 4,500,000 words can be sorted efficiently with
the maximum facilities indicated, including five intermediate Uniservos.
If the data for a single sort exceed that number, the extra merge passes
may result in running time in excess of that for two sorts and one merge
of the same amount of data.

There have been some requests for a recommended maximum run time. One
hour of central computer time is the recommended maximum for continuous
operation between recovery points. This is not a standard in the same
sense as those for maximum facility utilization but it is a practical
limit beyond which the user must anticipate a higher rate of non-productive
time.

l/ IIA tape units will be phased out of the computer systems once replacement
high speed printers are installed and FOSDIC-70 tape units are replaced
by compatible tape units. Therefore direct use of Uniservo IIA in a
production program should be avoided to the extent possible. An
exception will be granted for programs using FOSDIC-70 output until
hardware revisions are made to the FOSDICs.

2/ Use is restricted to one half the available units (2 at present).

CENFOR 19-46 March 1970

19.11. STANDARDS FOR OPERATION AND USE OF UNIVAC 1107 SYSTEM (Continued)

On-line printing facilities

In order to reduce the volume of "RUTT" translations now
required to permit off-line printing of computer output, pro-
vision will be made for on-line printing of limited volumes of
test and/or production output. Although it will not be possible
for a programer to call for assignment of the on-line printer to
an individual program, he may cause small quantities of output
to be prepared for separately scheduled on-line printing through
the CENSER service routine. Provision is being made to print up
to a maximum of 5,000 lines in this manner, the maximum to be
considered as applying to the total of all the output files of
a single run for which this technique for printing is to be
used.

To use the facility the programer may write the data in one of
two ways :

1. In LION external format, Fieldata code, on a
Uniservo IIIA; option TP.

2. In Census format LION, BCD XS-3, on a Uniservo HA.

The operating instructions for a program must specify on-line
printing and must state specifically which of the two formats is
to be printed by CENSER. Operations personnel will exercise the
option to print some of this work off-line in the event of a
backlog of on-line printing. To reduce the possibility of having
such a backlog, the facility should be used primarily for limited
amounts of test or production printing.

Reels normally printed off-line will be printed on-line, at the
discretion of scheduling personnel, provided the following
conditions are met:

1. A Standard board (1-5), standard loop (1-4), and
Forms 143-1, 2, 3, or 4 (or comparable form) are
requested.

2. The on-line HSP or HA tape unit are not needed for
other processing, including regular on-line printing.

3. The backlog for off-line printing is more than 100
reels.

March 1970 CENFOR 19-4.7

19.12. MOST USED BOARDS AND LOOPS FOR OFFLINE HSP

BOARD #1 Ten 12-digit words per line - Space between
words - No zero suppression.

BOARD #2 Ten 12-digit words per line - Space between
words - Zero suppression on each word.

BOARD #3 Ten 12-digit, or twenty 6-digit, words
per line - No space between words - No
zero suppression.

Ten 12-digit words per line - No space between
words - Zero suppression on each word.

Twenty 6-digit words per line - No space between
words - Zero suppression on each word.

Space after six double-spaced print lines - 24-
print lines per 11-inch page.

Space over fold - 31 double-spaced print
lines per 33-line page.

Space over fold - 30 double-spaced print lines
per 33-line page.

Space to new fold for fastfeeds 1, 2, 3, or U

There are more than 11 boards and numerous paper loops
available upon request. These are the most frequently used.

When printing binary data (not XS3 characters), ask for Board 3
and binary loop. It is also possible to ask for computer digit
printing where all non-printable characters will be printed on
a second line with substitutions made for various bit combina-
tions.

Custom boards and loops may be requested with discretion. Forms
BC-1596 and BC-1170 should be completed to conform to specif-
ications. Consult the manual "The High Speed Printer of the
UNIVAC System RRU16.1" and contact the shift supervisor in
Computer Operations Branch of Processing Division.

BOARD

#4

1
BOARD #5

PAPER

1
LOOPS

LOOP

#1

#2

#3 .

]

#4 ,

Note:

Ther<

CENFOR 19-48

March 1970

19.13. HSP NON-PRINTING CHARACTERS

The following characters do not print, however a representative
character is printed when Computer Digit is specified, for each
of the respective characters.

COMPUTER

ACTION

SYMBOL

DIGIT

BINARY

OCTAL

ignore

i

5

000000

00

multiline

i

E

010000

20

tab

t

N

100000

40

printer's stop

i-

V

110000

60

space

A

6

000001

01

breakpoint

/

W

110001

61

fastfeed 1

%

D

011111

37

fastfeed 2

1

P

100010

42

fastfeed 3

?

M

101111

57

fastfeed 4

=

T

111110

76

March 1970

CENFOR 19-4-9

19.14- AMOUNT OF SPACE PER PAGE

Printer

No. of Characters
per Line

No. of Lines
per Page

1107 On-Line
UNI VAC Off- Line
IBM HOI

128
120
132

54
60
54

Note: When printing off-line, a "fastfeed" before the first
output and after the last output will prevent the
sentinels on the HA tape from appearing on the same
pages as the output. The octal fastfeed code should be
inserted into the first character of a line in order to
take effect

CENFQR 19-50 March 1970

19.15. DATA PROCESSING EQUIPMENT AT THE BUREAU OF THE CENSUS
(Subject to change)

2 UNIVAC 1108 COMPUTERS

131 K (Sys. D) 65 K (Sys. C) Word Core Memory

2 FH4-32 Drums (524,288 words)

1 FH1782 Drum (2,097,152 words)

3 FASTRAND II Units (66,060,288 words shared)
U UNISERVO IIIA Tape Units (9-track)

4 UNISERVO HA Tape Units (8-track)

2 UNISERVO VIII C Tape Units (IBM Comp. 7-track)

1 Paper-Tape Punch

2 High-Speed Printers (755 Sys. C, 758 Sys. D)
1 CONSOLE PRINTER

1 REMOTE TELEPRINTER

March 1970 CMF0R 19 _ 5±

19.15. DATA PROCESSING EQUIPMENT AT THE BUREAU OF THE CENSUS
(Subject to change) ( Continued )

2 UNIVAC 1107 COMPUTERS

128-Word Thin Film Memory
65 K Word Core Memory

2 FH 880 Drums (1,572,864- words)

3 FASTRAND II Units (66,060,288 words shared)
H UNISERVO IIIA Tape Units (9-track)

4. UNISERVO IIA Tape Units (8- track)

2 UNISERVO IV C TAPE UNITS (IBM Comp. 7-track)

1 Paper-Tape Punch

1 High-Speed Printer

1 CONSOLE PRINTER

1 REMOTE TELEPRINTER

1 LABEL PRINTER

CENFOR 19-52 March 1970

19.15. DATA PROCESSING EQUIPMENT AT THE BUREAU OF THE CENSUS
(Subject to change) ( Continued )

4. UNIVAC HIGH SPEED PRINTERS

Off-Line IIA Input

2 MOHAWK DATA SCIENCES (MPS) 7160 OFF LINE PRINTER SYSTEMS
1000-1250 lines per minute
132/l60 characters per line
556/800 bits per inch (BPI) densities
1024- character core memory

1 MDS 2207 Magnetic Tape Unit per System

1 STROMBERG- CARLSON SC-4411 (Computer Document Recorder)

Converts information on Magnetic IV Tape to microfilm.
Translates up to 4- frames (76 lines of 132 characters
each) per second.

1 DATAMEC D 3029

4.1,700 CPS transfer rate
556 BPI density

2 KALVAR MICROFILM COPIERS

Produce copies of 16 mm microfilm on to Kalvar
film (input is produced on SC-4411)

Copies at a rate of 60 to 180 feet per minute

1 VISCOMAT PROCESSOR

Develops film from SC-44-11 at rate of 36 feet per second

March 197 ° CENFOR 19-53

19.15. DATA PROCESSING EQUIPMENT AT THE BUREAU OF THE CENSUS
(Subject to change) ( Continued )

1 IBM 360 MODEL 4-0 COMPUTER

65 K Bytes Core Memory
3 Disk Storage Units (2,250,000 each)
5 2401 Uniservo's (2-7 track, 3-9 track)
1 14-03 Printer (1100 line/min)

1 Central Processing Unit
1 Console (1052)

1 Data Transmission System 1013-7702 between Jeffersonville
and Suitland

1 IBM 1401 TAPE COMPUTER

1 2K Character Core Memory

1 1403 Printer

2 7330 Tape Units (7- track)

2 Uniservo Tape Units (8- track)
1 1407 Console Inquiry Station
1 1627 II Plotter

CENFOR 19-54 March 19?0

19.15. DATA PROCESSING EQUIPMENT AT THE BUREAU OF THE CENSUS
( Sub.j e c t to change ) ( Continued )

6 FOSDIC 70 's (Film Optical Sensing Device for Input to
Computers)

24 Bit Word Size
8K Word Core Memory
1 A Register

1 Fosdic Scan Unit

2 Mark III Uniservo's (UNIVAC IIA Comp. 8-track)

1 Flex-o-writer

MISCELLANEOUS

ITN REMOTE TERMINALS - CONVERSATIONAL TERMINALS

PI GI DATA - Creates a magnetic tape from paper tapes prepared by
Teletype

CalComp PLOTTER - Draws lines according to plotted positions

for use with IBM 14.01

DCT-2000 - UNIVAC remote batch (cards and printer under EXEC 8)

March 1970 CENFOR 19-55

19.16. CHARACTER SET FOR INFORMATION INTERCHANGE

When preparing data on magnetic tape for sale, or for another form of
interchange, the character set should be restricted to those characters
which are generally accepted and which are represented by a unique code
in any particular coded decimal language. Analysis of the IBM binary
coded decimal tape code recognized by eight computer manufacturers on
approximately fifteen different computer types reveals a consensus on
the ten decimal digits, the twenty-six alphabetic symbols, six special
characters and the blank or space. Also, each of these systems recog-
nize the Tape Mark.

The attached character conversion chart, Appendix I, contains the forty-
three character graphics and their coded representation in four languages.
The three six-bit languages are shown by their octal representation; the
coded decimal, excess three (BCD XS-3), code for space (A), octal 01, is
not shown. There is no distinction between blank or space in the other
languages. Therefore, when preparing potential interchange data in BCD
XS-3 originally, use only the ignore (^), octal 00.

Conversion between BCD XS-3 and binary coded decimal (BCD) is performed
by hardware on the UNIVAC 1107 or 1108 and on the IBM 1401 on the
premises. Conversion between BCD and extended binary coded decimal
interchange code (EBCDIC) is performed by hardware on the IBM 360, Model
40. Conversion between BCD XS-3 and Fieldata is performed by subroutine
ZC01. Conversion between Fieldata and BCD must be programmed.

The Tape Mark, which exists on IBM compatible seven or nine channel tapes,
is produced by hardware in response to an instruction. It is not
obtained by conversion from BCD XS-3 or Fieldata.

The six special characters which may be used in data intended for inter-
change are indicated below. They appear also in Appendix I.

octal

character
graphic

- (minus)

, (comma)

. (period)

\$ (dollar sign)

■k (asterisk)

/ (slash or virgule)

BCD

octal

octal

hexa-

XS-3

BCD

Fieldata

decimal

02

40

41

60

21

33

56

6B

22

73

75

4B

55

53

47

5B

56

54

50

5C

64

21

74

61

CENFOR 19-56

March 1970

19.16. CHARACTER SET FOR INFORMATION INTERCHANGE (Continued)

APPENDIX I

Conversion Code for ^3 Characters in
Four Coded Decimal Languages

Character

Octal 1/

Octal

2/

Octal 3/

graphic

BCD XS3 5_/

00

BCD
20

5/

2/

Fieldata 5/
05

EBCDIC

blank (space)

40

- (minus)

02

40

41

60

03

12

60

FO

1

04

01

61

Fl

2

05

02

62

F2

3

06

03

63

F3

4

07

04

64

F4

5

10

05

65

F5

6

11

06

66

F6

7

12

07

67

F7

8

13

10

70

F8

9

14

11

71

F9

, (comma)

21

33

56

6B

. (period)

22

73

75

4B

A

24

61

06

CI

B

25

62

07

C2

C

26

63

10

C3

D

27

64

11

C4

E

30

65

12

C5

F

31

66

13

C6

G

32

67

14

C7

H

33

70

15

C8

I

34

71

16

C9

J

44

41

17

Dl

K

45

42

20

D2

L

46

43

21

D3

M

47

44

22

D4

N

50

45

23

D5

51

46

24

D6

P

52

47

25

D7

Q

53

50

26

D8

R

54

51

27

D9

\$ (dollar)

55

53

47

5B

ir (asterisk)

56

54

50

5C

6/

March 1970 CENFOR 19-57

19.16. CHARACTER SET FOR INFORMATION INTERCHANGE (Continued)

Character Octal 1/ Octal 2/ Octal 3/ Hexadecimal V
graphic BCD XS3 j>/ BCD 5/ Fieldata 5/ EBCDIC 6/

/ (slash or 64 21 74 61

virgule)

S 65 22 30 E2

T 66 23 31 E3

U 67 24 32 E4

V 70 25 33 E5
W 71 26 34 E6
X 72 27 35 E7

Y 73 30 36 E8
2 74 31 37 E9

1/ This is a 6-bit code known as binary coded decimal excess three, used
in earlier model UNIVAC computers and peripheral devices.

2/ This is a 6-bit code known as binary coded decimal, used originally in
earlier model IBM computers and peripheral devices.

3/ This is a 6-bit code which originated from an attempt, by the military,
to produce a uniform code.

y This is an 8-bit code, known as extended binary coded decimal inter-
change code, which originated with IBM Systems 360.

£/ In the octal representation of each 6-bit code the three high order
bits are represented in the most significant digit of the octal code,
and the three low order bits are represented in the least significant
digit of the octal code. The range of each octal digits is 0-7.

6/ In the hexadecimal representation of the 8-bit code, the four most
significant bits are represented in the most significant position of
the hexadecimal code, and the four least significant bits are repre-
sented in the least significant position of the hexadecimal code. The
value range of each hexadecimal character is 0-15, where the values
10, 11 - - - - 15 are defined by the letters A, B - - - F, respectively.

7/ Octal 20 for blank, in BCD, appears only on tape. Internally this
code is 00 and the difference between the internal and external repre-
sentations is handled automatically by the hardware. Where BCD is
generated internally in the UNIVAC 1107 or 1108, and written to tape
without the hardware translation, the octal 20 must be created in core.

CENFOR 19-58

March 1970

19.17. Flowchart Symbols

Some flowchart symbols are used to indicate the flow and
the details of a program. Others are used to indicate in-
put-output or specialized functions. Still others are used
to indicate the overall systems design where several programs
are needed to process information. The most commonly used
symbols are described below.

PROCESSING

A group of program instructions
which perform a processing func-
tion of the program.

DECISION

The decision function used to doc-
ument points in the program where
a branch to alternate paths is
possible based upon variable con-
ditions.

CD

TERMINAL

The beginning, end, or a point of
interruption in a program.

CONNECTOR

An entry from, or an exit to,
another part of the program flow-
chart. Names consisting of
letters or numerals may be assigned,

SYMBOL STRIPING

The striping of a symbol indicates
that a more detailed representation
of the function can be found else-
where in the same set of flowcharts.

MULTIPLE EXITS

Each condition and each connector
must be indentified either individ-
ually or by means of a table.

CODE
= TO

1

2

3

CODE
= TO

GO

TO

GO

TO

A

B

C

1
2

A
B

March 1970

CENFOR 19-59

PREDEFINED PROCESS

A group of program steps that are
specified elsewhere, e.g., sub-
routine or logical unit.

ANNOTATION

or explanatory notes as clarifica-
tion. The broken line may be
drawn in any direction. Descrip-
tive information included with the
symbols must read from left to
right and from top to bottom. For
example :

IF OVERDUE CALCULATE
SERVICE CHARGE

FLOW DIRECTION

->

<r

/f>

Flow direction is shown by lines
drawn between symbols. The normal
direction flow is from left to
right or top to bottom. When this
be placed in the reverse direction.

INPUT/OUTPUT

Making available information for
processing or the recording of pro-
cessed information.

AUXILIARY OPERATION

An offline operation not under

control of the central processing

unit.

MANUAL OPERATION

Represents any offline process
geared to the speed of the human
being

CENFOR 19-60

SPECIALIZED INPUT OUTPUT-SYMBOLS

March 1970

MAGNETIC TAPE

X

PUNCHED CARD

DOCUMENT

MANUAL INPUT

DISPLAY ONLINE

ONLINE STORAGE

OFFLINE STORAGE

March 1970

CENFOR 19-61

MULTIPLE FILES

_z:

^1

Construct the first symbol
and then offset the succeeding
symbols toward one direction.

INTERNATIONAL SYMBOLS

PREPARATION

MAGNETIC DRUM

MAGNETIC DISK

CORE

DECK OF CARDS

CENFOR 19-62

March 1970

q

FILE OF CARDS

MERGE

EXTRACT

SORT

COLLATE

PARALLEL MODE

March 1971

CENFOR 19-63

19.18 NAMES TO BE AVOIDED FOR EXTERNAL SUBROUTINES

Sometimes a FORTRAN IV program compiles with no apparent errors and
yet an external subroutine prepared by the programmer is not listed
in the ELF allocation. This problem may be caused by a conflict of
names with system external labels; therefore, the following labels
s ould not be used for subroutine names.

A

0E.XP

DMIN1

INT

LDSRC

MOVET

SIGN

A0

CHANGE

DMOD

ITMIN

LD3RL

NFLAG

SIN

Al

CHXDIV

ITMIO

LFB

NOCHK

SINCOS

A2

CHSNCO

DSIGN

ITMOUT

LEX

NOTAPE

SINH

A3

CLOCK

DSIN

ITMRTN

LI FIB

NRCK

SINHCO

A/,

CLOG

DSINCO

INSERT

LOG

OCSUB

SLTTE

A5

CMPLX

DSINH

INSRTH

OENFIL

SLITET

ABS

COMPL

DSQRT

INSRTT

LPM0

OENREL

SNGL

ACOS

CONJG

DTAN

INSRTS

LPM1

OPECLO

SORT

AIMAG

COS

DTANH

ISIGN

LPM2

OPNIN

SQRT

AINT

COSH

DVCHK

IXTRCL

LPM3

OPNOUT

SSWTCH

ALOG

CR.IAST

ECSCAN

IXTRCN

LPM4

OR

STORE

ALOG10

CSIN

EOFSET

IXTRCR

LPM5

OVERFL

STRIP

AMAX0

CSINCO

ERR

JAH

LPM6

PACK

Tl

AMAX1

CSINH

EX

JAT

LPM7

PART

T2

AMIN0

CSQRT

EXIT

JNH

LPM8

PNCHU

T3

AMIN1

CTAN

EXP

JNS

LPM9

PRCNG

TAN

AMOD

CTANH

F4FDIT

JNT

LSLC

PRNTU

TANH

AND

D

FB

JLH

LSLL

PUTSCH

TST0

ASIN

DA.BS

FDIN

JLS

LSRA

Rl

TST1

ATAN

DACOS

FDOUT

JLT

LSRC

R2

THAN

ATAN2

DASIN

FLD

JRH

LSRL

R3

TYPE

B

DATAN

FLOAT

JRS

LS3U

UNPACK

B10

DATAN2

FLOPRP

•JRT

LSQ3

UNPK

Bll

DBLE

FOLION

LXB

UTABLE

BF

DCBRT

FX

LWJD

LXF

REAL

XB

BOOL

DCOS

HI

LB2F

MAX0

REWINT

XF

BX

DEXP

H2

LB2X

MAX1

SI

XLOC

CABS

DIM

IABS

LBF

MJN0

32

XM

CBRT

DINT

IDIM

LBX

MINI

S3

XOR

CCBRT

DLOG

IENFIL

LDSLC

MOD

S4

XSIN

GCOS

DLOG10

IENREL

LDSLL

MOVEH

S5

XSOUT

CCOSH

DMAX1

IFIX

LDSRA

MOVES

S6

XT3

CENFOR 19-64

19.19,

LION FORMATS

00

01
02
03

04

35 32

LABEL BLOCK (LION INTERNAL)
12

11110011110111110 111101111100111101

110

BLOCK COUNT

BLOCK LENGTH - CURRENT FILE

NUMBER OF FILE LABEL WORDS
(incl udin g date an d reel §)

USABLE TAPE

ITEM SIZE - CURRENT FILE

NUMBER OF FREE WORDS

DATE OF RECORDING (FIELDATA CODE)

LANGUAGE OF LABEL - XS3

1 - FIELDATA

REEL NUMBER (BINARY)

BALANCE OF BLOCK (IF ANY") DISREGARDED

1-2

1-1

BLOCK LENGTH - CURRENT FILE

1 1 -c

BLOCK COUNT

ITEM SIZE - CURRENT FILE

USABLE TAPE

File
Label

1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 I

233 words
for 240
-warcl block

113 words
for 120
word bloc!

* SORT will typeout up to 21 words for this LION INTERNAL format.

CENFOR 19-65

FIXED LENGTH ITEM BLOCK (LION INTERNAL)
35 17

NO. ITEMS IN BLOCK

NO. WORDS IN BLOCK

DATA ITEM (FIXED LENGTH)

DATA ITEM (FIXED LENGTH)

i\>/^ ■ — — ""

DATA ITEM (FIXED LENGTH)

BALANCE (IF ANY) DISREGARDED

■

NO. WORDS DISREGARDED

CHECKSUM

NO, ITEMS IN BLOCK

NO. WORDS IN BLOCK

CENFOR 19-66

VARIABLE LENGTH ITEM BLOCK (LION INTERNAL)

35

17

NO. ITEMS IN BLOCK

OOOOOOOOOOOOOOOOOO

NO. WORDS IN BLOCK

NO. WORDS, ITEM FOLLOWING

DATA ITEM (VARIABLE LENGTH)

ST

NO. WORDS, ITEM PRECEDING

NO. WORDS, ITEM FOLLOWING

Item-
Count
Words

NO. WORDS, ITEM PRECEDING

NO. WORDS, ITEM FOLLOWING

DATA ITEM (VARIABLE LENGTH)

NO. WORDS, I?EM PRECEDING

OOOOOOOOOOOOOOOOOO

BALANCE (IF ANY) DISREGARDED

NO. WORDS DISGREGARDED

CHECKSUM

NO. ITEM IN BLOCK

NO. WORDS IN BLOCK

CENFOR 19-67

00

01

02
03

46.

47
48

49

35 32

END OF REEL SENTINEL BLOCK (LION INTERNAL)

17

111100111101111100111101111100111101

10

0000000000000 00

BLOCK LENGTH - CURRENT FILE

000000000000000000

ITEM SIZE - CURRENT FILE

WORD 03 THROUGH 46 DISREGARDED

BLOCK LENGTH - CURRENT FILE

10

0000000000000 00

ITEM SIZE - CURRENT FILE

000000000000000000

1111001111011111001111011111001111 01

35 32

END OF FILE SENTINEL BLOCK (LION INTERNAL)

17

00

01

02
03

46
47
48

49

- ■ -

111100111101111100111101111100111101

0-
110"

-if last file

-* BLOCK COUNT

USABLE TAPE

BLOCK LENGTH - CURRENT FILE

ITEM SIZE - CURRENT FILE

„ ^ ^ _ _

WORDS 03 THROUGH 46 ARE DISREGARDED

— ^__^ ^ — - — -» — ^

BLOCK LENGTH - CURRENT FILE

ITEM SIZE - CURRENT FILE

BLOCK COUNT

USABLE TAPE

111100111101111100111101111100111101

- ; >if another file follows

CENFOR 19-68

Word

LABEL BLOCK (IIA COMPATIBLE)

00

747474747474

01

747474747474

02

Label

03

Label

04

Label

05

Label

Up to 63 words may be included
in file label. (SORT uses only 4)

Balance of block through word 118
"Z" filled, (octal 747474747474)

118 747474747474

119 00C00000C060

Printer stop in last word

DATA BLOCK (IIA COMPATIBLE)

Record 1 Record 2 Record 3 Record 4

etc,

Record Size - must be a factor of 120 but greater than 2
Block Size - fixed at 120 words

TERMINAL BLOCKS (IIA COMPATIBLE)

When items do not fill the block, the block will be filled
with terminal records. In the event that the last data record
completes a block, the next block is filled with terminal records,

TERMINAL RECORD

00

747474747474

01

747474747474

02

60xx>"x>'xxxxx

03

0000C00C0C00

04

0000C00C0000

05

xxxxxxxxxxxx

Record Fill -

747474747474

When records are less than 6 words,
first 3 words only.
xxxxxxxxxx (Record count in XS3)

xxxxxxxxxxxx (Checksum in XS3 formed from

the sum of left and right half sum
of every data word)
06 - 119 terminal records
Last block on tape (120 words of "Z's")

Note - The input terminal record may consist of all "Z's". If the
input checksum location consists of "Z's" or the constant
"END P ", it is accepted.

CENFOR 19-69

1 —

J Eh

Eh

! ^!

p

°

°

C

1 M

I P

^

| P

! pJ

P

' o

1 o

o

&h!

! — > P

P

P
P

1 °

O

cq

rl

P
c -2

3

P

-3j

e

1 P

P

r^

o

CO

H

i>

Q

tti

p

ttj

P

P

O

P

Fh

Ph

P

C£l

rV

rn

MM

J>]

Th

r->

S

8

Fh

<d

<ti

H

O

p.,

Ph

Cm

P

p
o

a

o
P

p
p

p

p

M

P
P
Ph
P

CO

P

CO

p

Eh
O

P

O

g

p

P
H

P

Ph

Ph

P

co

P
o

M

P
O
P

M

m

P
P
H
P
Ph

£
CO

En
P

Ph

Eh

p
O

Ph

P

m

Eh

P

O
P

p

p
p

H

P

O
H

P
* — -*
I
Ph
O

.Oh
P

o

CO
!

£5

o
o

O

Ph
P

Eh

I

Ph
P

O

o
o

P

Q

P
EH

3

p^

Ph

o

O

o

H

Ph

O

P
P
E-H

1

<

P

P

o

M

P

M

P

P

H

P
.

Ph
P
CO

p
o

O

o

M
P

o

p
o

p 4

p

p
p

M
P
P

P 1
CO

P

o
o

o

1—1

p
o

p

EH

1

CO
c-hI

N

Eh!
Pf
O f
OS

Dh!

Ph

Eh

p

H

P

P
H

O

o
I

o

p
p
p

«s!
P

to

H
I

H

s

p

P3
P

O

O

I

r-,

O

r^

CO

Ph
O

R

Ph

P CO

T-rT

Q

P

o

R P

<a;

CO

P O

p

co

Ph

«aJ !3

p

P-H

P
P

=aj p

p

P

£>!

M P]

H

q

&

H P

P

■=tj

p

1— 1 p

•oo

H
I

cv

p
p

Eh
Eh

to

p

o

Eh

Eh P
-q pq

P

B

p

Ph

Eh h-1
H P

I P

<d O

M Eh
H

Ph
O

P
P
P

O

o

I

!>
H

CV

P
P
P

CO

Fh

P
o

s

5

P

P CO

P

n p

P

P o

p p

P P

P
P =a}

H 5

<;

P

Pi H

I 1 r~*->

P

1 P

H

H P

■=tj P
H P

^

P
P 1!

!' II

H Ph

P P

H

H

H

P H

C*> vD

o

I

o^

Of,

CSNFOR 19-70

!

Eh

Ph

CH

PH

r-D

tD

P

P

s — >

b

o

O

O

a

S3

>2;

S

S

o

Oh

Ph

Ph

Ph

o

o

O

O

O

Ph

Ph

S

Ph

Ph

Sh

S25

Ph

o

O

O

O

O

o

o

1- 1

hH

I w

h"

P^

o

1—1

pr

o

o

°
I Pi

-— -

*-'

Ph

•~-^

--'

Ph

Ph

u^

vQ

M

O

tXl

>H

>H

o

CQ

CQ

pq

CO

Pi

Ph

PI

Oh

W

pa

r^

pq

Ph

P

P

EH

EH

W

EH

Eh

pq

pq

Eh

1

H

8

a

H

P

p- 1
P

id

3

Ph

a

Ph

Ph

(^

Ph"

Ph

Ph

Pi

Ph

Ph

a

a

P

<tj

a

B

B

Ph

Ph

co

Ph

Ph

CO

to

n

u

O

W

pq

pq

H

X

X

pq

pq

W

Ph
P

Ph
EH

p

o

PI
h-q

P
<ti

E-H

p

O

Ph
EH

b
o

pq
pq

H

pq

o

O

o

M

Ph

O

Oh

1

a
Ph

O

>H

pq

n

pq
H

PH
Ph
Ph
i=3
CO

o
o

o

H

Ph
O

O

Pi

pq

Eh

a

Pi

<ri
Ph

O

o

o

M

Ph
O

Pi
pq

ph

3

■~d

Ph

t I

O

p

pq
H

pq

Ph

Ph

1=)

CO

o

pq

H

pq

o

pq
X

pq

o

pq

CO 1

§

§

w

i-L-i

o

p

o

CO

o

£-i

;

1— 1

O

pq

C\2

p
p

a

pq

pq

P

a

pq

EH

pq

Eh

. ~i

a

o

o

I

m

CO

co

Ixl

£

pq

o

rr|

c;

O

a

EH

£

FH

H

H

FH

W

pq

H

a

pi

N

pq

► q

Pj

pq

o

Qi

Pi

pq

Pi

O

B

Ph:

z-^

P3

O

Pi

p
o

Pi

PT

Pi

P

O
P

to

H

o

pq

H

O

O

I

eS

pq

H
I

I

p
O

CO

co

p.

p

p
<

P Pi
a Pq
h Pm

EH P
PH P

s; m

o

o

i

co

s

pq
P
o
o

CO

p

Eh
<ti

EH

CO

l

PT
P

o
o

ft

pq

cv

l

O

C\2

pq
P

PH

Pi

pq-—
Eh p

cr 1 , p

Is a

OS

>H prl

pq
rxi

p pq
pq co

CO

p

o

o

I

CV

O

0^

\D

vO

pq

Eh

O !>

P

J>

F-

CENFOR 19-71

o

(H
(-}
O

w
o
pq-

o

CO

b

o

M
pq

W
M
>-}
Ph

CO

o

O

B

H

W

w

125
O

CtD

b

[o
O

CO

o

(H
On

CO

o

o

H

CO

EH

Si

o
o

p^
o

a

M

CO

Q

&q
Q

g

Pn

CO

S3

pq

Ph

o

CO
CO

e

q

p^
o

EH

C3

H

CO

Q

W

n

s

w

Eh
CO

O

en

I

in
en

o
o

CV

Cn

I

m
en

«0

rH

I

en

en

o

o

I

!>

rH

-4"

Cn

I

en

00

rH

I

en
en

o

o

I

rH

00

to

o o

o

H

o

rH

o

H

CENFOR 19-72

O
g

p

M

p

PL,

CO

a

EH
1=1
Ah
Fh
[3
O

pq

En
P

s

EH

O
O

M

Q

o

Q

Id

Pw

CO

to

H
I

C<^

H

O

o
I

O

Ph

P

O

C^\

Pi

Q

H

O

Hi

cv
H

P

CO

o

M

H
O

-4-

cv
i

o
cv

3

I

to

I

CV

CV
r-i

P

fa

o
p

S3

H
O

CV

*>-

CV

o

H
Eh
O

5

p

£5

s

P«4
o

p

o
I

H

rH

PL, P

Sh

CV

M

Pw

CO

o

[Si

CO

CV

Hi CVl

CENFOR 19-73

o

M
O

PH

r;

CO

i-l
O
Ph

pq

Q

H

M
Ph

CO

JU.

o

O

P^

o

CO

Eh
O

Q

a

o

O

CO Q
!=> O

w O

CV &H

=fc H

&q Q

fin M
CO

6

pq

o
-fe-

co

o

O

.a.

1

pq

Eh
O

CO

CO

Eh
S;

o
o

Eh fe;
K ED

O Eh

Ph Ph
Eh

o o

H

En H

P Eh

O <=3 •

<A

I

O

H

P^
«aj Eh

Ph"
W
Ph

|
PQ

O

\D Eh
H Ph CO
I S
C^ O O
H W M
W C -i

w §s

O I Ph
^s C- O

fh

o

o

O
Eh

CO

H

Ph

vO

H

CO

p

C3

n
co

EH
O

o
o

O

CS

PJ

i-q

M

Ph

M

O
l-l

Ph

O
►^

E
Ph

O

(H

!

«a!
M
H

PS

9

t3
1-3

o

pq

Ph
<
Eh

Q

CO

fH
O

CO
1=3

EH

O

S

o

Ph

-p=r

CO
Eh
M

PQ

o

00

H

!

H

CV

c-

c^

o o

O 0^

I I

H »n

o o

o o

I I

CV Cf>

H

H

st

in
H

o

o

I

m

vO
H

CENFOR 19-74

Ph

o
i

pq

Eh

s

O

o

P3
i-q

M
Cm

PT

o

PC?

1=3
O
CO

o

3

pq

l-H
Ph

CO

CO

in

EH

o

O
I

»,o

co

i

t— h

n

H
H

O
O
I
IT\
O

o

Ph

CO

CO

s
s

o

Of

Al

Ph
pq

i

pq

O

CO

o

*3

o

V

Cm

pq

O
O

to

H

I

>o
co

CO
CO

q

P3

pq

Cm

|

pq

o

o
o

!>

O
&

Ph
O

Cm
O

o

CO

Eh

Cd

<"1
Ph

rsi
M

CO
Oh

cq
Em

B

pq

to

H

i

>-0
CO

C3

pq

y

pq

i

EH

o Po-
st o
pq Pm

o

Eh

O

O

1>

Q

cq

CO

O
h-q
o

H

Cm

O Ph

Heh
O Cm
Cm <i{

M =

pq o

n "
pq o

PL,
Oh
t3
CO

Ph

&q

CO

o

pq

n

pq
M

Ph
CO

o
o
o

H

Pm
O

Pm"
pq
Eh

Oh

CO

o

a

oq

p t
o

£3
O

pq

H

i-q

Ph

CO

O

n

g

pq

M

Q

O
O

oo

oo
H

oo

ON

o

CM

CENPOR 19-75

b

H

p

o
K

O

P

1=3

o

CO

o

f— I
1-1

P

P
W
H

i-h 1
Ph
Ph

P

CO

!25

o

H

pq

o
Ph
p

8

o

PQ

Q
pq
M
P

Ph

CO

o

H
M
M

a

CO

pq

s

P

CO

pq
o

O

CO
&H

M

pq

pq
rj3

O

EH

CO
■^

CO

o
w
p
o

I

<t!
M
H

O

O

!

in
en

re?

P CO

O CO

O Q

O CJ
H S
CO H

F-i
I P

<3
<d En

H CO
H

O

o
I

in
en

H

Ph

O

Ph

P
P

%

H Ph

H O
H

CV

O
CV

Ph

o

CO

CO

P

CO o

q
eh |a

<^J H

W Eh

Ph fe

O O
O
PI

pq co

Ph P

P
H pq

Ph H
Ph £h

M

M <3
►—1 Eh
Ph 3
P O

o o

Q p

p P

en
H

O

PQ

pq
P
O
P
H
CO

O

o
I

in
en

6

i>

5*

o

P

P CO
<aj CO

pq p

S P

P

PI
CO
P

Eh
O
t2!

O

o
I

m
en

m

Ph
O

p

H

Ph

O

\0
I

H

p
p

CO

P

Fh
O

O

o

I

in

en

p

pq
CO
P

PH

o

o

o

I

m

en

Fh
O

Ph
CO

O
H

Eh

o

O

CO

P

pq

CO
P

"c\T

cv

i

H

cv

CO

-g-

p

CV

cv

en
cv

cv

in

ev

cv

w
ev

GENFOR 19-76

a

s

o

o

M

M

iJ

P

O

o

Fh

Ft,

M

PQ

Ph

o

Q

cd

5=>

H

o

i-P

CO

Ph

6

CO

6

Ph

Ph

1=1

O

PQ
<A
Eh

s

EH

O

o

H

H

Fh

Ph

B

CO

Si
o
1—1
h-H

5H

PQ
Q
CO

En
O

EH

1

i-Ch

Ph
O

Q
S3
Ph

O

l-H

Ph

CO

I

cd
o

i-v->

W

Eh

O
O

w
3

rH
rH

PQ

P^ Eh
O Ph
Ph S
Eh
Ph H

c5 ^

<d p^

Ph O
O Fh
Eh —
CO

CO

o

& !s S
H O 5
Eh P^

<d P

3

!
m

en

O

O

I

CV

cv

o
o

I

o

en

P3 H P

HH M &^

O
O
I
m
en

en

1=3
O

o

o
o

gpg

f3 H P
O

O
I

in

en

en

P

Fh
CO
P

Eh
O
Si

O

O

!

*n

en

co

ph

O

o
o

!

in
en

o

Q

Ph

o
o

M
Fh

O

en

en

-<h

~1<

en

?fi

CENFOR 19-77

EH

B
fa

PQ

EH

fa:

s

Eh

b
o

fa
H

fa

a

o
o

H
H

fa
O

fa

PH

<3
fa

fa

fa
PQ

fa

fa

o

o

Eh
P^

m

fa

Eh

H

N

P-H

o

fa

o

es

o
o

fa
o

fa

EH

I

fa

PH

El
fa

fa

H

fa

3

fa

fa

fa

H

fa

o

o

I

o

fa

fa

PQ

fa
O

co

CO

Q

q

to

H
I

ir\

<H

co

fa
fa

cq
3

o

fa

e

o

o

I

iH

o

M
fa
O
fa

pq

Q

fa
M
fa
Ph

CO

o

p.

Q

fa
M
fa
fa
fa
fa
CO

CO
Q fa
<d Q

fa O
O

s

~fa

fa o

9 M

Oh EH

•dj O

fa fa

CO fa

fa
o

M
Eh
O

I

fa
fa
fa

fa O

H O

n fa pq

fa !! I!
fa

<<OH
Eh

O

en

I

en

fa fa

IS! fa

H O
CO

- <

fa 1-H
EH— ^

M

to

H

I

o

CV

i-:h I— 1
fa EH

Q

CO
fa

CV

rv

H

O

o
I

rH

CV

fa

o

M
fa
O
fa

M

pq

e

M
fa
fa

fe

CO

fa

fa
fa
M
fa

O
en

!
in
en

cn

•^

s

<

1-H

i3

Hh

H

fa

M

M

fa

II

1 1

ii

v£>

CENFOR 19-78

a

M

a

Ph

o

Cm

o

a

Pm

o

Cm

o

cq

a
o

M

I-q
o

Cm

JH

PQ
Q

cq

H

i-q
Pm

co

1

a

H

O

£

o

O

Cm

£

JH

cq

pq

<D

n

<D

w

CO

M

c:>

PU

H

-

6

cq

CO

EH

ca
PQ

EH
EH

J^

O
O

cq

i-q
1-1

Cm

a

o
o

Pm
o

o

Q

cq
H

i-q

Cm

CO

o
o

Cm
O

O
H

Cm 1

cq

EH

I

Pm

H

cd

cq
Cm

o

6 B

pq cq

Pm 1

S Cm

a

o o

o

a cq

H

i-l

1 1

M

o >*

LD

-^o^

y

cq

H

h-1

Pm

CO

\$

n

&

Q

83

cq
.-q

cq
cq

rd

Cm
O

cq

p

M

O

h-l

a

1

O

§

H

pk;

H

Pq

M

o

o

I

o

CM

C>

O
O

■si"

to

H
I

c^

EH

H

><!
cq

Pd

Q

Cq

i-q

s

EH

a
o
o

fa
i-q
H

Cm

O

o

I

in

Eh
H

o
cq

q

CO

lp\

vO

o

cq

CO

p

EH

o
a

o

o

I

o

vO

Cm
Eh

O
Pm

a
o

o

cq
o

H

H

O

cq

-e=r

o

a

cq

n

o
o

CO

p

Eh
<U
(H
CO

O
OA

2>

ca
Q
o
o

cq

CM
!

O

CM

cq

IS]
M
CO

Pm

cq

Cm

pq

O

o

I

CM

cm

o

I-q

P o

Pm" Cq

Q H

Cq

pq h

cq
pq co

co

P cq

a

I HI

p

§

o

CENFOR 19-79

pq
g
o

CO

Si

o

H
hh

O
Fh

pq

Q
pq
tH
k1

Ph

Ph

CO

O

o
Ph

M

pq

pq
M

>-q

Pn

CO

£3

S

S;

O

O

O

1— 1

H

M

i-l

h-q

(-1

O

O

O

Ph

Ph

Ph

N

M

>H

W

pq

pq

Q

Q

Q

W

pq

W

M

M

H

i-l

i-q

h-J

Ph

Oh

fX,

Ph
|3

^

e

CO

CO

co

o
Ph

pq

o

K

y

EH

£3

Ph
Eh
hh 1

s

EH

O
O

H

Ph

O
H
i-q

pq

1=3

o

CO

o
I— I

pq

Q

pq

H

i-q

Ph
Ph

[3

co

OA

o

CO

CO

o

H

HH

pq

Q
pq
H

Ph
CO

is;

s

?3

O

o

O

M

i-q

a

a

tH

M

M

m

m

P-l

o

Q

n

N

H

W

M

H

H

i-q

i-q

h-l

Ph

Ph

Ph

£

Ph

1=>

£

CO

CO

CO

o

pq

o

H

pq

co

pq

EH

Is
o
o

pq

Q

o
o

Si

o

H

Eh
O

O

M
O

pq

pq

i-q
pq

o

P4
o

| T{

O

Ph
O

§
H

CO
pq
Q

pq
a

Q

p^

pq

Ph
CO

Si

2

H

Ph

p

o pq

M Ph

O
EH

Is

PI
pq

o

EH

H

CO

CO 1-1
CO

gpH

|S

<3

Ph

o

Eh

s

M

CO

&q
fi

Ph
S

P^

pq
Ph
CO

CO

Ph
O

Ph

PQ

co

EH

M

pq

o

!

o

o

I

o

cv

cn

to

H

o

o

I

rH

I

CO

rH

I

o

o

I

p

to

to

o

o

o

o

o

rH

o

CENFOR 19-80

CV

Ph

H
1

O

Ph

!>

CO

CO

EH

CO

pq

O

S3

Es c

,. — ,

Si

p£j

S

fcg

O

CO

Ph

O

o

M

<d

H

H

Kl

r:

r:

O

i-q

~

3

O

H

O

O

Ph

i>_

H

Ph

Ph

pq

_

_

3

CO

O
Ch

H

pq

_

M

p£j

O

O

{~r|

CO

p^l

pq

H

EH

£h

rH

M

o

hn

g

<rj

r-q

CO

o

Cm

Z:

z:

fej

Ph

^

Eh!

Ph

<jj

Ph"
pq

1

pq

CO

CO
pq

EH

O

Ph

o

M

EH

CO

O

Ph"
H

pq

Eh

H

FH

i-q

to

l-H

Ph

•

<i.

••

g

CV

>i

H

=t*= f=

i-q

1

^_^

Ph-

§

o

Sh

pq

3

pq

o

o

Ph

^- — ■>

s

H
►q

H

i-q

-

-

i

rq

o

rH

p

<tj

m

n

i-4

Q

Eh

M

o

o

pq

^

Pq

pq

~

r:

ft?

o

Ch

<!

hh"

O

o

o

Q

Ph

Ph

O

pq

B

5

Ph

H

Eh

Ph

Eh

o

M

Eh

v — x

O

^

J2>

CO

1-3

H

Q

S

O

o

Ph

w

D

pa

O

1*1

e

o

pq

H

pq

w

tz

n

<u

CO

i-q

cq

n

pq

CO

Ph

|3

Ph

Ph

CO

t — l
H

S CO

<rj

Ph

R

C5
3

o

H

H

pq
o

H

pq

CO

rH

!

C^i

rH

E-«

Ph

Q

P

O

CO

D-i

EH

§

o

|

P^

H^-n

n

P^

rH

g

H S

CO

Ph

i

H O

EH

<

pq

a

H

S

CO

Z:

Eh

o

^— -^

W

W

H

CO

<H

H

FH

o

O

rH

&

EH

r^

Pm"

S23

O

s

-

g

1 Ph

c^ pq

g

O

IH

pq

e

CO

pq

1

O

rH

EH

Ph

C5

rH

Ph

H

E*

CO

l-H

g

2!

o

Ph

O

r-

J

i-q

s

S

Q

Ph

^

P-q

pq

H

pq

II

525

Pcj

o

s

o

H

CO

a

o

pq

H

JS

EH

O

t»

o

—

H

g

EH

1

Eh

o

EH

H

i-q

rH
O

S

§

=

CO

H

Ph CV

O
S2J

o

Ph

ZL^

P

i-q

o

(Hssfc

hJ

Eh pr;

p

to

O

o

O

Ph pq

S

to

CV

O

CO

rH

o

C^i

O

^

pq Ph

H

rH

o

EH

1

1

1

!

b

o Ph

pq

1

1

1

M

l.r\

o

in

»n

H

H £?

ffi

>Pv

o-

rH

PQ

f^

rH

c^

r^

i-q

• •

pq PQ

Eh

C^

rH

rH

Q

pq

Ph

EH

O

H

rH

cv

CV

o

HA

C^

c^

3

rH

rH

H

rH

S

rH

rH

rH

CENFOR 19-81

o

a

o
Ph

&q
o

Pi
!=>
O

53
O
H
1-3
O

pi

H

Ph

Ph
P

CO

>H

pq

S3

p

(25

H

pq

H

53

H 53

^

Ph

J O

Ph

o

Qh M

o

P=H

feci

rx.

o

CO Ph

o

o

CO

Pi
w

E-i

Pi
<
Ph

Ph

P

P

S3
«*!

«3J

H

l-l
H

EH

3

P3

Eh

EH

3

O

o

w
1-q

M

53

O
1-1

Ph
O

o

CO

w

Eh
O
S3

CO

o
o

H
H

Ph
O

to

Pi

Ph

EH

1

Ph

53
O

m
o

pq
H

i-q

On
CO

Pi

Q

CO

pq
Eh
53

o
o

pq

M

Ph

Pi

n

M
M

pq
p
o
o

o

M

Eh
O

Ph

I

<t
M
M

P
Ph

CO

P

Eh
O

53

n

pq

CO

P

Eh
O
53

O

h3

pq

53
M
Eh

CO

P
Eh
C3

Pi
pq
Ph

g

I — '

pq

P

EH

O

§

hJ

pq

.-q

P

-=ti

£

*-r!

>

dq

IS]

Pi

H

o

CO

Ph

s

6

EH

r:

M

CO
Eh

o

l

co

O

o

o
c\?

to

H

!

ic\

co

o
o

l.r\
co

to

H

c°\

O

o
I

o

H

O

O

I

to

rH

I

IT\

O

o

o

13

-4

H

H

in

H

£>

i>

to

rH

O

O

CENFOR 19-82

Eh

Ph

H

PQ
■a!
En

i-q
o
Ph

Eh

O
O

a

H
Ph

o

a

H

o

l-l

M

O

hH

Ph

O

Ft,

W

H

n

cq

po"

p

Q

o

m

r/)

H

i-h"

Ph

p

CO

o
o

en

o

CV

O

M

PQ

Q

H
Ph

CO

H

3

PQ

H
M
H

O

O

I

in
en

o

C\2

Eh

w

i-q
PQ

<

pcJ
Q

O
H

O

H

O

O

I

m
en

hi"

ev

00

H

I

in
en

cv

■to

I
in

en

en

o
o

r-

H

en
c\2

CO

CO
CO

Ml

CO

o

H

Ph

p=;

pq

s

w
til

o

En

Eh
Eh
CO

CENTOR 19-83

53

o

M

fa
O

w
o
pi

o

CO

S5

b

o
fa

pq
P

fa

IH
fa

PL,

CO

Eh
p

M

pq

EH

s

EH

o

O
W

fa

M
Cm

53
O
H

fa

w
o

g

o

CO

53

o

M

PQ

P

fa
H

fa

fa

&

CO

CO

fa

O
O

CO

53 Ph
O Eh
H

Eh 53
<tj H

fa Eh

Ph 53

O O

O

^ n
M fa

Ph fa

g

a

pq
p

o

Ph W

o

fa fa

^ 53
O

C"- CO

Ph

CO

pq
a.

O fa

53 <
H 1x1
CO

O

Eh

O
H
O Fh
13 gj

Fh fa
O Ph
O
CO
CO Ph

fa fa

Pi Ch

Ph fa

Q P

3 m

fa
o

CO
CO

Ph
Ph

Q

><

fa
Ph
EH

53
M

<

EH

53 •
O en
O H

i-h Q

fa fa

H O

PQ

ii

H
O

w

S o

5 fa

P^ Ph

P o

P p

£5 53

■=h «aj

•=aj P

M <q

M fa

M Ph

53
Eh H
H

Eh
II CO

= 3
H

O CO

- I-H

I P

_^ H
2 CO
p CO

Pi fa
p o

Q

P Pi

53 Ph

C3 fa

< 53 ~

M M ■_

H WlD

h m m

fa

fa

P

53 P

fa fa

Ph

11 3

= Eh

H fa
O P

fa
I fa

_ 53
S H
P Eh
Pi 53
P fa

CO
P

53 W
<tj fa

H
«aj fa
H

M fa
H O

fa
fa

fa
O

tx>

<TA P

in 53
fa
co

53 I!
M
«aj =

EH rH

53 O
O =
O

1
I

<aj I-H
M H
M M

O

I P

fa

P O

Pi fa

Q ll
P P

co

CO

< <

^

H Ph

H M

rH

o

h m

7r.

CO
Ph

i — i
cq

O

O

I

in
en

O

en

l
in

Cn

-4

CM

I

O

cv

60

H

!
Cn

rv

CV

H

I>

rH

O

O
O
I
in
O

o

cv

cv

in
CV

in
cv

in

cv

in

cv

in

cv

JENFOil 19-84

EH
\=3

pq

EH

s

Eh

O
CP

pq

H

pH

•

s;

vO

pq

o

CV

P

M

o

i-q

Ph

o

o

^

Ph

S

<tj

Q

S3!

o

S

o

w

a

=

-

-

-

in

g

a

-

o

o

pq

O

PS

Eh

co

Ph

Ph

1=>

Q

o

M

Cq

pq

>H

CO

m

tz

tz

n

zz

O

PC

pq

^

!3C E

Q

n

pq

Ph

s

pq

i— i

o

H

H

i-q

=a3

hq

PL,

—

c

r:

n

pq

O

Ph

n

fe

w

fe

CO

M

O

>-q

§

vO

CO

pq

W cv

Eh

§

•

o

Zz

^

rH

O

Ph

=

O

S3|

-t

H

CO

«aj m=

s

S3!

Eh

s

o

o

S3!

S

o

1-1

=

=

=

-

o
o

1

=

pq

pq

r:

~

—

^

t-3

CO

pq

Zl

o

n

g

pq

l-H

Q

tD

w

IH

pq

o

EH

Cn pr

H- 1

CO

i-q

CO

^-q

Ph

=f£= r-ii

Ph

fe

=

-

-

--

tTN

pq
1

Ph
{=3

-

CO

o.?

CO

g

H

EH

. _

o

l_^

H

>

s

O

^>\

O

p£]

O

g

Ph
O

a

23

Q

Q

Q

M

Q

W

§

Q

pq

M

pq

w

pq

CO

o

CO

CO

CO

pq

II

rs

CO

a

Q

<

M

CO

q

S

a

pq

o

O

pq

g

r:

Ph

o

Ph

3

o

H

o

pq

o

pq

CO

o

»j

pq

a

H

pq

pq

F— 1

r:

W

pq

i-q

Eh

Ph

Q

p^

pCJ

9

H

M

Ph

<E

w

1

pq

E

Ph

Ph

i2!

O

M

H

Eh

H

Q

S

^

s

Cm

II

Ph

pq

O

^

O

ii

O

EH

63

pi3

«jj

o

rq Q

r:

Pu

Py

Ph

Q 3

r— i

^

H

Q

tq

^

.-q

CO

pxj

H

O

j^

O

£)

«s

S3! Q

Q

T3 S

w

p

pr|

M

s

^A Pq

pq

d

pq

pq

pq Pq

CO

cd i~q

1

1

nq

1

P-q

s pq

t=)

w

1

<rf

r:

Ph

P

<tj pq

-aj

<tj

js

o

<

i

= o

Eh

M3

H

<3

H

s

c

H

H O

O

M

H

H

o

H

pq

p O

S

M

M

M

M

Pd

pq
PQ

M

pq

i-q

-4

to

CV

vO

O

EH

l-H

^i-

to

CO

C\2

H

H

O

O

Ph

M

cv

H

Eh

1

1

1

1

1

<aj 3

l

1

M

VTN

cn

£>

H

1T\

tPv

en

pq

Cn

cv

rH

rH

O

pq

cn

Oi

EH

9

O

Q

MD

MD

vO

vO

vO

£>

t>

Is

CV

CV

C\2

CV

CV

cv

o(

L

CENFOR 19-85

EH

p

H

3

pq

EH

P

g

Eh

O
O

H

E

S3

S3

Jg

O

o

o

a

H

i-q

-

-

=

-

-

=

=

P

o

o

O

E

E

E

M

M

pq

pq

r:

^

~

r:

Z2

t:

~

w

o

p

P

Ph

w

pq

p

H

H

o

(-1

i-q

CO

Ph

6

CO

Ph
CO

S3

S3

S3

p

o

o

O

o

H

3

■"

*"

=

tj

~-

=

*-

H

M

JH

M

pq

ra

c

r:

n

pq

~

zz

r:

o

#

Q

Q

P

p

pq

Eq

pq

o

H

CO

zz

ri

H

co

p

Pm

p

-

P
Ph

6

PH

O

--

j.

_

e

j-

-.

=

co

P

CO

§

M

<

P

p

O

Y-\

O
H

Eh
1

a

^

EH

P

>H

EH

pq^-s

p

P

pq

M

H

P

O

CO

CO

o

§

pan

Q

eh P
P P

g

o
o

g

O

P

pq

J3

E

tD

1

H

pD

CO

g

CO

w

F-i

s

H

CO

Q

}v^

p

EH

pej

1

pj

p ■<

P H

pq

,- — x

P

P

o

o

S3

tq

4S= !2

O

o

pq

o

Eh

O

[V|

^

O H

Eh

pq

o

P

pq

O

o

E

p

Q

M

93

P

P

s

o

Ph

P

p

p£

Pd

fav_^

o

O

pq

p£l

EH

O

Ph

^J

pq

pq

pq

Q

Dq

S3

s

§H

P

n

a

i-q

Ph

EH

tq

O

CO P

pq

H

pq

pq

M

M

<

P

CO

Ph

o

CO CO

C23

El

EH

PR

fo

P

O

pq w

<tj

Pi

p

b

-vf

P-!

[a

Ph

O

"

pq

pq

en

3

^>

p

J

n pq

o

Ph

Ph

Ph

1

} i

o

S3

H

P p

Eh

s^^-

o

o

<sj

<

H

o

S3
O

pq
to

E

o

dj o

CO

o

O

o

o

o

EH

o

EH

en

o

O

ui

CO

o

O

H

o

H

o

o

o

o

O

o

EH

1

1

1

1

1

1

!

1

1

1

13

H

i>

LOv

m

I>

ITN

f>

in

ITS

trS

!X\

PQ

H

Cn

en

rH

en

r-\

en

cn

en

cn

pq

Eh

Q

o

5h

g»

CD

!>

to

O

o

o

O

rH

CV

en

-4-

!3

C\2

CV

CV

CV

C^

en

en

en

en

en

20. SLEUTH II

March 1970 CENFOR 20- 1

20.1. INTRODUCTION TO SLEUTH II

The SLEUTH II assembler may be called to assemble SLEUTH II*
subroutines during the compilation of a FORTRAN program. The
requirement is that an ASM card be used instead of a FOR card
prior to the SLEUTH II coding. The form of the ASM card under
the present system is :

@PI ASM name., , name „, name o

where name., , name„, and name,-, stand for the source name, the
updated source name, and the name attached to the relocatable
binary output of the subroutine.

In order to write SLEUTH II coding, the programer should have
a knowledge of the hardware characteristics of the UNIVAC 1107.
It would be helpful to study the 1107 Census Computer Manual
and SLEUTH I Programer 's Reference Guide. The SLEUTH II Pro-
gramer' s Guide UP-3670, Revision 1, is the UNIVAC general manual.

This chapter is a short synopsis of the main elements in SLEUTH II,
Appendix C lists the instruction repertoire.

20.2. INSTRUCTION WORD FORMAT

The format of the machine language word on a field basis is
illustrated below:

F

J A

X

H

I

M

Bits 6 4. k k 1 1 16

Where :

F indicates the operation code listed in Appendix C
J partial word determinant or minor operation code
A the register or i/O channel designation field
X the index register designation field (sometimes

referred to as the B register)
H the index register incrementation field
I the indirect address designation field
M the base operand address field (often called the u field)

The format of a symbolic instruction is altered for convenience of
programing. Commas are used to separate operand subfields. The
basic line of coding is divided into three or fewer fields. They
are the LABEL, OPERATION, and OPERAND fields. Each field may be
divided into subfields. A subfield is an expression which is
terminated by a comma, unless it is the last subfield in the field,
In this case a space terminates both the subfield and the field.

*A SLEUTH II element may be the main program followed by FORTRAN
subroutines or an entire program may be written in SLEUTH II.

CENFOR 20- 2

March 1970

20.2. INSTRUCTION WORD FORMAT (Continued)

For instructions which involve a control memory location, the
following formats are appropriate :

LABEL

OP

F

F,J

OPERAND
A,M,X,J
A,M,X

For instructions which do not involve a control memory location,
the following format is used.

LABEL

OP
F

OPERAND
M,X

The entry in the F field is the instruction mnemonic. Unique
mnemonics have been created for each operation code and sub- function
code combination. Therefore, the entry in the J field will not
be used for sub- function codes.

SLEUTH II expects the A field to represent the absolute film
memory address of an arithmetic, index or R register, depending
upon the instruction mnemonic. The following table supplies the
addresses in thin-film memory where the registers are located

1-15 X registers — index registers sometimes called
(octal 1-17) B registers. There are 15 index registers on

thin-film available to the programer. They are
36 bits in length.

Each index register is divided into two portions;
the right half 18 bits, or Q portion, and the
left half 18 bits, or A portion. The right
half (Q portion) is the address modifier. In
operations specifying modification of the
operand address by the index register, the Q
the M (or u) field before the operand is
referenced. Thus the operand is taken from the
Q portion is a signed number and may be + or -.

March 1970 CENF0R 2Q _ 3

20.2. INSTRUCTION WORD FORMAT (Continued)

The A portion, the left-hand 18 bits, contains
the increment which may be applied to the Q portion
if the instruction specifies address incrementation
after the Q portion has been used. Thus the incre-
mented modifier will be used the next time that
index register is used. Index register incremen-
tation is indicated by preceding the X field with
an asterisk.

12-27 A registers (overlap X 12-15)
(octal 14-33) There are 16 thin-film arithmetic registers.
Each of these registers is 36 bits in length.
They may be used for the accumulation of totals
in arithmetic operations, both fixed and floating
point. They are also used in load and store
instructions, logical instructions, shifting,
tests, and searches. Only the input/output
and a few other instructions do not use an A
register. Certain instructions use two con-
secutive A registers: Product of a multiplication,
dividend of a division, certain shift instructions,
and floating point instructions.

The assembler will subtract 12 from the value of
the entry for an A register.

64-79 R registers
(octal 100-117) There are 16 R registers on thin-film. The first
four of these registers are special purpose
registers. R64. (0) the real-time clock which is
under control of EXEC. R65 (1) the repeat counter
which the programer will load before executing a
repeated instruction. R66 (2) is the mask register
which the programer will load for certain instruc-
tions. R67 (3) is the temporary storage for the
address of the next instruction. It is used
during repeat instructions. The remainder of the
R registers may be used as storage areas.

The assembler will subtract 64. from the value of
the entry for an R register.

CENFOR 20-4

March 1970

20.2. INSTRUCTION WORD FORMAT (Continued)

Registers and partial word determinants (J field) may be addressed
by using mnemonic designators (which are predefined and equated
within the Census SLEUTH II Assembler for the 1107).

1-15

12-27

Overlap X12-X15 properties
of A and X

6^-79

Registers

Mnemonic

X

XI - XI 5

or Bl - B15

A

AO - A15

Q

QO - Q3

R

Rl - R15

Partial Word Determinants

Left half

Right half

Left half, sign extension

Right half, sign extension

First third, sign extension

Second third, sign extension

Third third, sign extension

Sixth of word

Contents of M field is operand

Contents of M field with sign
extension

Mnemonic

HI

H2

XH1

XH2

Tl

T2

T3

SI - S6

U or M

XU or XM

Octal
Code

2

1

U

3

7

6

5

15 - 10

16

17

EXAMPLE:

L A0,10,,U may be used instead of
L 12, 10,, 016

March 1970 CENFOR 20- 5

20.2. INSTRUCTION WORD FORMAT (Continued)

If the instruction mnemonic is such that the A field designates
an A, X, or R register, the instruction may be coded to omit the
A X, or R and the A field is examined to determine the proper
code. Thus, in the following examples, the resultant codes are
equivalent.

L 17, M is equivalent to LA 17, M
L 2,M is equivalent to LX 2,M
L 65, M is equivalent to LR 65, M

The entry in the M field respresents the base operand address.
Indirect addressing is indicated by preceding the M field with
an asterisk.

The entry in the X field represents the specific index register
to be used.

The entry in the J field is used to designate partial word transfers
to and from the arithmetic unit.

20.3. THE LABEL FIELD

The label field in SLEUTH II may consist of a declaration of a
specific location counter, a label, or a combination. If the
latter is desired, the location counter declaration is the first
entry on the symbolic line, and is followed by a comma if a label
is also present. In any case, a space in the first position
implies that none of the above is present. The existence of a
label is indicated by the presence of a valid character (A-Z) in
the first position of a symbolic line. A "\$" in the first position
signifies that a location counter is to be specified.

A. Location Counter Declaration

32 location counters are available in SLEUTH II; however, if
no location counter Is explicitly used, the program is controlled
by location counter zero. The declaration of a specific
counter is accomplished by entering \$(e) as the first entry in
the label field with "e" being a number between and 31. These
counters are used to regroup, in any arbitrary manner, lines
of coding. It is useful in segmentation (See INFO directive).
Each new location counter entry begins the coding relative to
zero, and coding under a previously defined counter will con-
tinue at the last address specified for that counter. \$(e) — "e"
may be an expression as well as a hard coded constant.

B. Labels

A label may be from 1 to 6 characters long, the first character
must be pure alphabetic (A-Z). Succeeding character may be any
combination — alphabetics, numerics (0-9), or \$. A label may
be subscripted for uniqueness. The subscript does not count
as an integral character of the label (i.e. CAT apart from CAT(l))
The subscript may also represent a dummy value within a procedure
or function.

CENFOR 20- 6 March 1970

20.3. THE LABEL FIELD (Continued)

B. Labels (Continued)

An asterisk may be affixed to a label. When this label is
defined outside a procedure, it becomes externally defined .
This means the label is known outside of the program. The
asterisk does not count as a character of the label.
(Examples: CAT* or CAT*(l))

If a location counter is to precede a labelled line, a comma
and the label must immediately follow the location counter
designation.
(Example: \$(l),CAT)

FORMAT IS |(e), LABEL

20. 4-. THE OPERATION FIELD

If the first character position of a coded line is blank, the line
is considered not to possess a label. The first non- blank char-
acter following column one is interpreted to be the start of the
OPERATION field (exception is a period, semicolon, or apostrophe)

The operation field may contain 4 types of entries:

1. An instruction mnemonic, with a possible j designation
(may not be used if that instruction is contained in a
literal) .

2. + or -, indicating a data word; or single quotes may
surround an alpha constant.

3. An assembler directive .

U. A label previously defined as a legitimate entry point to
a PROC or FUNC.

In all the above cases, except 2 which is optional, a space
following any character except a comma ends the OPERATION field.

Unless the directive RES is present, the controlling location
counter will be incremented by one after each word is generated.

20.5. THE OPERAND FIELD

The OPERAND field may contain subfields which are separated by
commas. Any operand may contain fewer than the maximum number of
subfields, or none. If a subfield other than the normal first or
last is to be omitted, two contiguous commas or a comma, zero,
comma (,0,) is necessary. If the first normal subfield is to be
omitted, a "," must be coded. A period space coded just after
the last element will cause scanning to cease and will speed up
assembly time.

March 1970

CENFOR 20- 7

20.5. THE OPERAND FIELD (Continued)

EXAMPLE :

;3),FRD AND 17, TABL, 1,4-

XOR 20,WS,,U
The missing subfields in the second
line have a value of zero to the assembler

20.6. CONTINUATION

If a semicolon ( ; ) is encountered outside of an alphabetic item,
the current line is continued with the first non-blank on the
following line. Any characters on a line after the semicolon are

20.7. TERMINATION

Further operand information is not interpreted when the maximum
number of subfields required by the operation have been encountered,
or by the assembler's recognition of 80 characters, whichever
occurs first. A period space coded after the last subfield will
cause scanning to cease and speed up assembly time.

Following the information portion of a line , any characters may

Example:

LN;

A

16, ;

TABL, 3,5

2

REGISTER kU

•

WITH THE COMPLEMENTED LEFT

HALF OF THE

•

THE LABEL TABL AS

•

MODIFIED BY INDEX

3 THIS

EXPLANATION

•

WOULD APPEAR AS A

COMMENT

LINE

20.8. DATA WORD GENERATION

A + or - in the operation field, followed by one or more subfields
separated by commas in the operand field, may be used to generate
a constant word. Optionally, the operand may follow immediately.
An alpha constant such as 'ABC coded without the "+" produces a
left justified word in contrast to the following rule.

CENFOR 20- 8

March 1970

20.8. DATA WORD GENERATION (Continued)

If the operand contains one subfield, the value of the subfield
will be right-justified in a 36-bit word. Two subfields result
in two 18-bit fields. Three subfields result in three 12-bit
fields. Six subfields create six 6-bit fields. Each subfield
may be signed independently. Subfields may be decimal, octal
(precede number by 0), or alpha (enclose in single quotes).

Examples :

-16384

+ »B», -0257

octal 777777737777
octal 000007777520

-56,0407,-313. octal 770704077306

8, -04, 21,-28, 017, -H

. The above line produces octal 107325431761

20.9. EXPRESSIONS

An expression is an elementary item or a series of elementary
items connected by operators. (See Operators.) Blanks are not
permitted within an expression.

Elementary Items

An elementary item may be a label, a location, an octal number,
a decimal number, an alphabetic, a floating point number, a
line literal, or a parameter.

a. Any label may be used as an elementary item. Whenever a
label is encountered within an expression, the value
equated to the label is substituted for the label within
the expression.

EXAMPLE :

CONST

EQU
LA,M

010000
16, CONST

b. The symbol for a current location counter reference is "\$"
When \$+n is coded, care should be taken so the interval
does not extend over a procedure call where the procedure
is of variable length.

EXAMPLE:

March 1970

CENFOR 20- 9

20.9. EXPRESSIONS (Continued)

Elementary Items ( Continued )

c. Octal digits (0-7) may be represented as an elementary item
by preceding the digits with a' zero. The binary number
will be right-justified in a signed field.

EXAMPLE :

+017 . produces octal 000000000017
-074. . produces octal 777777777703

Decimal values may appear as an elementary item within an
expression. The binary number will be right-justified in a
signed field. The number must not be preceded by zero.

EXAMPLE :

+12 . produces octal 000000000014

-12 . produces octal 777777777763

Alphabetics may be represented by enclosing the alphabetic
characters with apostrophes. If a + precedes the term,
then the value will be right-justified with zero fill to
the left. If no + , then the value will be left- justified
with Fieldata spacefill to the right. An alphabetic item
used as a literal is assumed to have the plus. If a plus
precedes the item, the number of characters is limited to
six. The CHAR declarative may alter the alphabetic char-
acters.

EXAMPLE :

will produce octal 000015120611
will produce octal 151206110505

Floating Point Numbers are represented by placing a decimal
point in the value. The decimal point must be preceded and
followed by at least one digit. The value will be repre-
sented in the UNIVAC 1107 internal floating point format.

EXAMPLE:

-16384.0 . floating point 217400000000

CENFOR 20-10

March 1970

20.9. EXPRESSIONS (Continued)

Elementary Items (Continued)

g. A literal may be represented on an instruction line by

enclosing the constant within parentheses in the normal M
portion of the instruction word. This will cause the
assembler to generate a word containing the constant to
be sent to the end of the program and duplicates will be
eliminated for a particular counter.

In addition to a constant data word, the line item may be
an instruction word. A label is not permitted in the case
of an instruction word line item. The first character
following the left parenthesis must be the start of the
OPERATION field.

EXAMPLES OF LINE ITEMS:

LA
TE
TNE
LA

16, (0^00)

17, ('BRING')

18, (J RAT)
19, (((899)))

octal 4-00
alpha 'BRING'
instruction word of J RAT
the location of the location of
. the constant 899 will be
A 14-, (TE 16,(3)) • two literals will be generated

h. An elementary item may be a PR0C or FUNC parameter,
and FUNC descriptions.

See PR0C

20.10. OPERATORS

There are 14. operators which designate the method and sequence
of combining elementary items or expressions with a subfield.
Blanks are not permitted within an expression. Evaluation of
an expression begins with substitution for each element. The
operations are then performed from left to right in order of
hierarchy. Parentheses may be used with care to alter the order
of operations. Note that these are assembly time operators.
The value produced by operators should not be confused with the
value produced by a literal and therefore is not an address.
The order of hierarchy is the highest number first.

March 1970

20.10. OPERATORS (Continued)

HIERARCHY OPERATOR
6 *+

*/

-!C-

/
//

+

>

CENFOR 20-11

DESCRIPTION

a"+b is equivalent to a "10

a*-b is equivalent to a*10

a#/b is equivalent to a*2

arithmetic product
arithmetic quotient
covered quotient (a//b is
equivalent to
a+b-1.
b )

arithmetic sum
arithmetic difference

logical product (AND)

logical sum (OR)

logical difference (Exclusive OR)

a=b has the value 1 if true,
if otherwise

a>b has the value 1 if true,
if otherwise

a.<b has the value 1 if true,
if otherwise

CENFOR 20-12

March 1970

20.10. OPERATORS (Continued)

F.XAMPLF.S Of Operators :

a. = : The assembler compares the value of two items or
expressions and assigns a value of 1 if equal, a
value of if otherwise.

DO A=3, RES 3
If the condition specified is met the controlling
location counter will be incremented by 3
otherwise the line will be skipped

b. >

c. <

The assembler makes the comparison between two items.
If the value of the first expression is greater than
the second, the value of the expression will be 1,
otherwise it will be 0.

(A>2)

*5

. If A

is > than 2

the value

of the

. expre

ssion

is 5,

otherwise

the

. expre

ssion

value

is 0.

The test in this case is less than.

+A<2*2

If A is<4. the expression value is 1
otherwise the value is

d. ++: The assembler will produce the logical sum of the

items or expressions and use the logical sum as the
value of the expression.

A EQU 4.

(A**1=0)* A++1

The value of the expression

above is five

e. — : The logical difference (EXCLUSIVE OR) produces the
logical difference between two expressions or items,

A EQU 3

(A**1)*A~1

The value of the expression
above is two

March 1970

CENFOR 20-13

20.10. OPERATORS (Continued)
EXAMPLES Of Operators

f.

The logical product operator (AND) produces the
logical product of the values of two expressions,

+

/

N

EQU

17
; "3

.

The

value

of

the

expression

above

•

is one

The arithmetic sum operator produces the algebraic
sum of two items or expressions.

LX 8,WS+1

Index register 8 will be loaded with
contents of the word following the
word labelled WS

The arithmetic difference operator produces the algebraic
difference between the values of two items or expressions.

SA

16,AN-1

. The

contents

of

regis

ter

A4-

will

be

stored

in

the word

pre<

ceding

the

wc

3rd

. labelled AN

The value of the expression is the product obtained by
the multiplication of the two items.

N EQU 17

n-nAh

The value of the expression above
is one

The first expression is the dividend, the second is the
division. The result is the quotient. The remainder

B

EQU
(B»*

16
3=0) *

bA

•

The

value

of

the

expression

above

•

is

four

CENFOR 20-14

March 1970

20.10. OPERATORS (Continued)

EXAMPLES Of Operators:

k. // : The covered quotient operates in the same fashion
as / (the arithmetic quotient) with the exception
that if there is a remainder, the quotient is
increased by 1.

A EQU 3

(A**370)*A//2

The value of the expression
above is two

1.

The positive decimal exponent is a method of
symbolically creating a floating point constant
in UNIVAC 1107 format. a*+b is equivalent to
a*10 b .

+0.234-*+6

The value of the expression above is

octal 222711017776

m.

The negative decimal exponent functions in much the
same manner as the positive exponent. a*-b is
equivalent to a*10

+0.972*-3
The octal value of the expression
above is 166775467206

•/ : The shift exponent allows the programer to enter a
number and specify its binary positioning to the
assembler. The shift may be left or right according
to the sign of the exponent (-b will produce a right
shift). a*/b is equivalent to a*2P.

z

DO

36, +04-00000000000 V(l-Z

)

.

The

line above will generate

36 words

.

The

octal value

of the

first

word

is

.

400000000000

.

The

octal value

of the

last l

,/ord

is

.

777777777777

March 1970 CENFOR 20-15

20.11. SLEUTH II ASSEMBLER DIRECTIVES

The symbolic assembler directives within SLEUTH II control or
direct the assembly processor. These directives are represented
by mnemonics which are written in the operation field of a
symbolic line of code. The flexibility of each of these directives
is the key to the power of the assembler. The directives are used
to equate expressions, to adjust the location counter value, and
to afford the programer special controls over the generation of
object coding.

Before the directives within SLEUTH II are defined, it will be
necessary to have a further discussion of labels and their areas
of existence. As explained before, a label defined in a program
proper (outside a procedure or function) is known only within the
confines of the program. If an asterisk is affixed to the label,
it becomes known outside the program (externally defined).

The procedure which will be more clearly defined under PROC can
be thought of as a group of lines of symbolic coding independent
from the program proper. The level of the procedure is considered
to be one higher than the program, or one higher than the procedure
within which it is nested. Labels defined within a procedure
definition are known only in the procedure unless an asterisk is
affixed. The asterisk results in the label being "lowered" a
level and is then known to be available or recognizable to the
program or to the next lower procedure within which it is nested.
Labels in the program are always available to a higher level area.
Similarly, labels within a procedure are available to the procedures
which are nested within the procedure.

The directives are:

EQU DO WRD

RES PROC CHAR

FORM NAME LIST, UNLIST

END GO EQUF

LIT FUNC

INFO

20.11.1. EQJJ

The EQU (EQUal) directive equates a label appearing in the label
field to the value of the expression in the operand field.

FORMAT: LABEL EQU e

This value may be referenced in any succeeding line by use of the
label equated to it. If a label is to be assigned a value by
the programer, it must appear in an EQU line before it is con-
sidered defined.

CENFOR 20-16

March 1970

20.11.1. EQU (Continued)

If a particular expression is used throughout a program or
procedure, it is highly expeditious to use the EQU directive and
substitute a simple label for the entire expression.

A EQU 7/22816*31+ (5//B)
LA 16,2*A,,U

When procedures are nested, labels which are defined in higher
levels by EQU directives may be made available in outer procedures
by affixing an asterisk in the innermost procedure in which it
is defined.

L EQU

010000

M EQU

16

LA

A4,L,,U

will produce

. this c

ibject coding

10

16 04-

00

010000

20.11.2. RES

The RES (REServe) directive allows a change to be made to the
control counter by incrementation or decrementation. The
operand field contains a value that may be represented through
the use of any expression.

FORMAT : LABEL RES e -,

The RES directive may be used to create work areas for data
or to specify absolute location counter positioning to the
assembler. If a label is placed on the RES line, it is equated
to the present value of the control counter, which is in effect
the address of the first reserved word.

BETA

RES
SA

010
l6,BETA+4-

. The

line

above will

store

the

contents

of

. register

M in the

fifth

word

of

the

. reserved

area BETA

March 1970

CENFOR 20-17

20.11.3. FORM

The FORM directive is a means of describing a special word
format designed by the user. This word format may comprise
fields of variable length (within a word). The length in bits
of each field is defined by the user through expressions in
the operand field of a FORM line. The value of each expression
specifies the number of bits desired in its respective field.

FORMAT: LABEL FORM e

1>

, e

The number of bits specified by the sum of the values of the
operand expressions cannot exceed 36.* The assembler uses
the values of the operand expressions within the FORM line to
create a control pattern that dictates a word format.

A reference to a word format is accomplished by writing the
label of the FORM directive in the operation field followed by
a series of expressions in the operand field which specify
the value to be inserted in each field of a generated word.
A reference to a specific FORM label will always create a word
composed of fields in the same format. Of course, the contents
of the fields may vary according to the expression values in
the referencing line. Truncation will occur and an error flag
set if a given value exceeds space permitted for a field as
indicated in the FORM directive. If fewer or more than 36
bits are specified, no error flag will be set.

INSTR

FORM 6,4,4,4,2,16

INSTR 054,0,04,01,0,

010002

. The

line above would produce

an

. edited word as follows :

. 54 00 04 01 010002

20.11.4. END

The END directive indicates to SLEUTH II that it has reached the
end of a logical sequence of coding. In the case of an END
directive which terminates a program, the operand field should
contain an expression which specifies the starting address of
the program. In the case of a procedure, the operand field is
ignored. In the case of a function, the expression in the
operand field represents the value of the function. There may
be no label associated with the END line.

FORMAT:

END e

1

*This limit of 36 applies only to the 1107 word size.

CENFOR 20-18

March 1970

20.11.5. LIT

The LIT (LITeral) directive defines a literal table under the
control of the location counter in use when this directive is
encountered by the assembler. Only one LIT directive is allowed
for each location counter. Through the use of LIT directives,
a number of separate literal tables can be created. Duplicate
literals are eliminated within each unique literal table; how-
ever, duplicates may exist in separate literal tables. In the
absence of a LIT directive, all literals will be placed in the
literal table under control of location counter zero. The
entries in the label field of a LIT directive comply with the
rules of labeling concerning the location counter declaration
and label construction. The label, however, may not be sub-
scripted, be affixed by an asterisk, or be referenced.

LA 16,(04)

. The octal

literal 004

will

be

. placed in

the

literal

table

. controlled

by

location

counter

zero

Use of the label with a literal will place the literal generated
in the table of literals associated with the control counter
current at the time the related LIT directive was encountered.
The origin of the literal table follows the last coding line of
the specified location counter. Duplicate literals are dis-
carded in each table but may exist in separate literal tables.

If a literal table not under control of location zero is
required, a LIT directive is used. If a LIT directive has no
label, a literal not preceded by a label will be placed in the
unlabeled literal table. If desired, unlabeled literals could
location counter is used. If a LIT directive has a label, all
literals to be placed in this literal table must be preceded by
the label associated with this LIT directive.

FORMAT : LABEL LIT

REFERENCE: Label (literal)

EXAMPLES :

\$(2)

LIT

LA

16

,(04)

. The

octal literal

000000000004

will

. be ]

olaced in the

literal table

. controlled

by location counter

two

March 1970

CENFOR 20-19

20.11.5. LIT (Continued)

EXAMPLES : (Continued)

2), TOM LIT

LA 16,(04)

LX 3,T0M(01000)
The literal 000000000004- will be placed
in the literal table controlled by location
counter zero

The literal 000000001000 will be placed
in the literal table controlled by
location counter two

20.11.6. INFO

The INFO directive can be used to specify the sequence of
location counters and their bank placement to the monitor
system. An INFO directive is not necessary for program assembly.
Without an INFO directive, the even-numbered declared location
counters will be assigned sequential addresses in bank two and
the odd-numbered location counters in bank one.

FORMAT: LABEL INFO

1 2 7 n

The label is optional.

"a" represents the group number for type of storage.

Each of the Cq values will correspond to the location counters

and labels \$(Cn) coded in the program.

The group number has the following meanings :

1,2

5,6
3,7

33,34,37,38

The group will be absolute and no relocation

will occur.

Bank one or bank two on a dependent basis. This

pertains to segments which may be overlayed by

previous segments.

Bank one or bank two on an independent basis.

Drum space is made available for the group,

dependent or independent.

Common blocks.

Block Data.

INFO 2 1,10,5,28,30
The Line Above Will Place The Segments
Defined By Location Counters 1,10,5,28,30
In Bank Two In The Sequence Given
By The Directive

CENFOR 20-20

March 1970

20.11.7. DO

The DO directive is used to generate a specified value or
line of coding a defined number of times. Two entries appear
in the operand field of this directive. The second operand
entry may be any valid symbolic line with or without a label.
The number of times this line will be produced is determined by
the value of the expression contained in the first operand
entry. The two operand entries are separated by blank comma
( A>)« If there are no intervening blanks between the comma and
the first character of the second operand entry, the symbolic
line to be produced is assumed to have a label.

FORMAT: LABEL DO e-,A,ALINE OF CODING
or FORMAT: LABEL DO e-, &, LABEL ^LINE OF CODING

A label may be written in the label field of the DO directive.
In this case, the label is not equated to the location counter
value, but to a counter whose initial value Is always one.
Each time the directive is executed this counter is incremented
by one until the required limit, specified by the first operand
expression, is reached.

I

DO

io A 3

A+I

,

THE

VALUE

I WILL BE

GENERATED TEN

.

TIMES THE

FIRST

VALUE OF I

WILL

•

BE 1

. THE

LAST

VALUE

WILL

BE 10

If the number of times the DO is to be executed is negative, an
E flag will be set and no lines generated.

The DO statement may be a conditional statement. That is, the
number of times it is executed may be dependent on previously
assigned values being altered.

An example is:

£)0 a<ba,A-3

. ASSUME A AND B HAVE VALUES ASSIGNED BY EQU STATEMENTS
. IF A<B IS TRUE THEN ONE LINE WILL BE PRODUCED
. OTHERWISE NO LINES WILL BE PRODUCED

A

EQU (

I

DO
LA
LA

((A*

16,
17,

*7)-6)+4

TAG(2)
TAGU)

,TAG(I)

+1* 2

.

THE

DO LINE WILL

CAUSE 4-LINES T" hK

GENERATED

.

HAVING ASSOCIATE!

) LABELS

OF TAG(l) '

ro TAGU)

•

The

CONTENTS OF THE LINES

WILL BE 2

,4-, 6, and 8

March 1970

CENFOR 20-21

20.11.7. DO (Continued)

DO statements may be nested within DO statements up to a
level of 8. As expected, the inner DO statements are executed
first.

I

DO 8

, J DO 3 , +I+J

THESE

NESTED DO Statements

will

produce

.

A TABLE OF 24 ENTRIES,

THE

CONTENTS

OF

.

WHICH

ARE : 2, 3, 4, 3, 4, i

5,4,5,6,5

,6,7

,6,7,

8,

•

7,8,9.

8,9,10,9,10, AND

11

20.11.8. PROC

Often the programer will find a recurrence of sequences of
coding very similar in nature. A device which permits the
programer to generate similar sequences of coding is called
the procedure. When a procedure sample in the source coding
is encountered, the assembler stores all the lines of coding
in the procedure and will generate this coding in the source
program when the procedure is called upon. By varying the
calling sequence, the assembler will modify the lines gen-
erated at assembly time.

The procedure definition is introduced into the source
program by the PROC directive which must have a label
associated with it. This label may be externally defined
(using an *)• The PROC line may or may not have an operand.
The procedure itself is terminated by an END directive. If
an operand is present on the PROC line, it will have a for-
mat of A,B.

CENFOR 20-22

March 1970

20.11.8. PROC (Continued)

Future calls on this procedure can be made by referencing the
procedure label.

FORMAT OF PROCEDURE CALL
BLAP

The procedure must be defined prior to a procedure call.

Many PROCS are written in such a way that the PROC label is not
externally defined (does not have an *) . In these cases, the
PROC is referenced by other externally defined labels within it.

FIELDS, SUBFIELDS

In order to activate a given procedure, certain information must
be given to the assembler at the time of call. The basic element
of information supplied in the call is called a subfield. A
string of subfields separated by commas is called a field. Fields
are separated by spaces. Information given in these fields is
transferred to the procedure sample into parameter reference forms
which are subscripted indicators. For brevity, these parameter
reference forms will be called paraf orms .

The operand expressions of a procedure reference line provide
specific values to be inserted into a general framework of
coding. The expression ADDP(a,b) is an example of a dummy value
in the procedure named ADDP. The assembler will look for the
bth subfield of the ath field and substitute this value when the
procedure is being evaluated.

An example of a PROC, a reference, and generated coding:

PROC

. PROC

LA

,1))

AA

kU, CONSTA

SS

END

063, RAM

. REFERENCE

LA

A^, (063)

. GENERATED CODING

AA

AA, CONSTA

SS

A4, RAM

In the above example, two subfields in one field were expected by
the PROC. If the originator of the PROC wished to have 2 fields
with 1 subfield each, the notations within the PROC could have been

063 RAM

March 1970 CENF0R 20 _ 23

20.11.8. PROC (Continued)

OPERAND FIELD OF PROC LINE

A, the maximum number of fields furnished to the procedure,
and B, the number of lines generated give the assembler enough
information to know when to stop scanning input lines and to
avoid double evaluation of the procedure.

It is essential that the B term be omitted if any of the
following situations occur:

a. Forward references are made in the procedure.

b. External definitions are made in the procedure (except
entry points) .

c. The procedure could generate a variable number of lines.

d. When a change of location counter control occurs within
a procedure.

An example of how a normal Instruction word may be generated via
a systems procedure is shown here for the LA instruction.

PROC

LA*

NAME

010

F

,2)

FORM 6,4,4,

4 , ^

o),

2-^

>,16

: "3)

y, ;

L0AD(0,0) is the value (010) on the name line which is the
function code of the instruction LA.

J designator.

L0AD(l,l) is the expected A designation.

L0AD(1,3) is the index designation. L0AD(l,< ; -3) will set A or 1

BIT in the incrementation designator field.

L0AD(l,2) is the M(or U) portion of the instruction.

CENFOR 20-24 March 1970

20.11.8. PROC (Continued)

Parameter Reference FORMS or PARAFORMS

L is the label on PROC or NAME line.

L - The number of fields submitted on call. If entry

was made via NAME line, this figure is greater by 1.
L(a) - The number of subfields in the ath field (in the

case of the FUNC it always refers to the number of

subfields in the first and only list) .
L(0,0) - operand on NAME line (meaningless if entry was not

L(0,l) - Second subfield of operation field submitted
with a NAME directive, given at time of call.

L(0,a) - (a+l)th subfield of operation field submitted
with a NAME directive.

L(n,M) - mth subfield, nth field of input information of
call operand.

L(n,*M) - equal to 1 if mth subfield of nth field is pre-
ceded by asterisk; equal to if not.

LABEL 1* PROC
LABEL 2* NAME W

END

. REFERENCES
LABEL1 A,B C D E
LABEL2,F,G N,0,P

(1) Entry Via LABEL1

LABEL1 - 4 (number of fields)

LABEL1 (l) = 2 (number of subfields in 1st field)

LABEL1 (1,1) = A

LABEL1 (2,1) = C

LABEL1 (3,1) = D

LABEL1 (4,1) = E

(2) Entry Via LABEL2

LABEL1 = (number of fields including NAME field) = 2

LABEL1 (0,0) = W

LABEL1 (0,1) = F

LABEL1 (3,1) = (meaningless)

March 1970

CENFOR 20-25

20.11.8. PROC (Continued)

Labels On A Reference Line

A label may be affixed to the line of reference to a procedure
Under normal conditions, this label will become associated
with the first line of coding generated.

Example :

x - ;; -

PROC

1,2

ONE

LIST AND TWO

LINES

. OF

CODING TO BE

GENERATED

TLEM

X(l,l)

4>

, S3

J \$+3

END

RAM

X

A2

TWO

LINES

GENERATED

LA

A5,RAM

•

RAM

IS FIRST LINE

It is possible to associate a label with a line within the
procedure other than the first one. This is done by coding
an asterisk (*) alone in the label field of that particular
line in the procedure definition area.

In the above example, if an asterisk had been coded in the
label field of the line "J \$+3", then this line would have been
the one referenced as RAM.

Nested Procedures

The nesting of procedures can take two forms:

1. If a procedure definition is wholly contained within another
procedure definition, it is explicitly nested in the larger
and the internal procedure is considered to be one level
higher than the procedure which contains it. If no other
procedure bounds it, this procedure is considered to be
one level higher than the externally bound procedure. This
type of procedure may contain other procedures. A level of
63 is maximum. Entrances to internal procedures can be
made only through its family of procedures, and never outside
the external procedure unless extra asterisks are added to
the internal-procedure entry points to raise their level.
An internal procedure may only be referenced after a call
has been made on the external procedure.

CENFOR 20-26

March 1970

20.11.8. PROC (Continued)

Nested Procedures (Continued)

2. A procedure which is called upon by another is said to be

nested within the calling procedure at the time of reference,
This type of referencing is limited to 63 levels.

If a GO statement is used in a procedure with an entrance
label to another procedure, this is not considered nesting
but is a lateral transfer and does not change levels.

The externalized labels of the innermost procedure may be
referenced outside the procedure sample, i.e., in the pro-
gram proper. Any other labels are unknown outside this
area of definition. Any of the labels (both unstarred and
starred) may be referenced by a nested procedure. If,
however, a reference is desired by the outer procedure to
a label in the next immediately contained procedures, that
label must be suffixed by an asterisk to reduce it
to the level of the enclosing procedure.

Labels may be redefined on different levels. If more than
two levels of nesting take place and a label defined in the
innermost level is to be referenced in the outermost level,
and then redefined successively upwards. Redefinition on
higher levels of a nested procedure entry point is secured
by adding as many asterisks to the entry as the number of
procedure levels through which the label definition is to be
carried.

Example of Nested Procedures :

y*

PROC

B*

PROC

C*

PROC

LA

A2,

1,, 1

Z*

EQU

3

cci

EQU

3

CC2**

EQU
END

U

BB1

EQU

1

BB2*

EQU

2

2*

EQU
END

Z

CC1

EQU

1

CC4*

EQU

2

AA

EQU

12

LX

Z, U

END

A2 is known to all
Internal procedures
Available only to C Procedure
Available to C,B,and Y Procedure
Terminates C Procedure
Available in C and B Procedure
Available IN C, B, AND Y Procedure

Terminates B Procedure
Available in C,B,AND Y Procedure
Available in C,B,AND I AND PROGRAM

Terminates Y The Outermost Procedure

The label Z is brought from the innermost to the outermost
by a series of EQU directives. Nesting is time consuming
and should be avoided when possible.

March 1970 CENFOR 20-27

20.11.9. NAME

The NAME line has 3 functions. It provides a local reference
point within a given procedure or function. It acts as an
alternate entrance (s) into the procedure or function. In any
case, it must be located between the PROC or FUNC line and its
respective END line. The third function of the NAME line is
that it may give a value to a procedure. This value is written
as the operand of the NAME line and becomes meaningful as the
0th subfield, 0th field if and only if the procedure is entered
at this name line. If such a value exists, this counts as an
be added to this 0th field at the time of call as shown below:
The paraform label (a,*b) will produce a 1 if that subfield in
the call is preceded by an *. If not, it will produce a 0.
Paraform labels may be used as operands on NAME lines only if
NAME line is contained in a nested procedure.

SEE"- PROC 4 . MAX NO OF FIELDS IS 4
SAW* NAME 2 . VALUE COUNTS AS A FIELD
LA SEE(1,1),SEE(1,2),SEE(0,0),SEE(0,1)

TLE SEE(2,1),SEE(3,1)

GO EYE . U)

EAR* NAME U

BA SEE(1,1),SEE(0,2) ,SEE(0,0) ,SEE(0,l)

DO SEE(3 ,*1) , +3 . (5)

EYE* NAME

END

. PROCEDURE CALLS

SEE 16, CAT 17, DOG *43 . (1)

SAW 16, CAT 17, DOG U3 • (2)

EAR, 6, 7 17 . (3)

Line 1 represents a call into the procedure via the PROC line.
The subfields represented in the operand filed are SEE(l,l),
SEE(1,2),SEE(2,1),SEE(3,1) and SEE(4,l) which will be substi-
tuted in corresponding places in the procedure. At this time
SEE(0,0) and SEE(0,1) will have values of since the entrance
was not made at a NAME line. The DO statement will generate
a +3 data word.

The Line (2) entrance will provide values for SEE(0,0) ,SEE(0,1) ,
tion the paraform SEE(0,l) is considered 5, the second subfield
of the zeroth field. SEE(0,0) is 2. The DO statement will
generate no line of coding.

Line(3) causes entrance at the NAME line labeled EAR. SEE(0,0)
is 4. SEE(0,1) is 6 and SEE(0,2) is 7. SEE(3,*l) is 0.

The label of a NAME line must be made external (LABEL*) if it
is to be used as an entrance point or if it is referenced prior
to the NAME line in which it was defined.

CENFOR 20-28

March 1970

20.11.10. GO

This directive transfers control of the assembler to the label
in the operand field. This label must be a bona fide NAME line
label or PROC label. GO is used within a procedure or function
and may be a legitimate directive instruction used in con-
junction with a DO statement. Line (4) in the example under
20.11.10, is effectual only if entrance is made at SEE or SAW
lines. In this case, the procedure is terminated after the
TLE is generated.

DONC

PROC

Dl*

NAME

D2*

NAME 1

DO D0NC(0,0), =

-- o ,

GO OUT

SZ GAT

OTJT*

NAME

END

If entrance is made at Dl, no code will be generated. If
entrance is made at D2, then "SZ CAT" will be generated.

20.11.11. FUNC

SLEUTH II enables the user to obtain a value at assembly time
contingent upon a set of parameters. The value obtained is
substituted for the reference call within the program.

The function is different from the procedure in that a value
is calculated when a function is referenced and no object
lines of coding are ever generated.

The general rules of definition are similar to the PROC. A
FUNC directive must start the definition area. This line
must have a label which may be starred. If this line is an
entry point it must be starred. The delineation of code is
terminated with an END directive which must have an OPERAND.
This OPERAND field will be an expression whose evaluation
will result in the proper quantity being substituted into the
reference point in the program.

NAME lines may be alternate entry points into the FUNC. The
labels associated with these NAME lines must be starred in
this event. NAME lines may also be used as local reference
points within the FUNC. Forward references should be avoided.

A single list of n subfields is used. The reference point is
of the form LABEL (a,b,...n) where LABEL is the FUNC line label
and a,b,...n are input values. This reference point can be
found imbedded within an expression or can be the entire
expression itself.

March 1970

CENFOR 20-29

20.11.11. FUNC (Continued)

Label (0) is meaningful as a paraform if entry to the function
is made through a NAME line. This input value is the operand
of the NAME line. If no values are given and the label alone
is coded as a paraform, it represents the total number of sub-
fields submitted to the FUNC.

A particular subfield within the FUNC list is referenced within
a FUNC by writing the FUNC label followed by one expression
enclosed in parentheses. This expression specifies the ordinal
number of the subfield within the list.

PROCS or FUNCS may be nested within a FUNC provided the
procedure is not a line generating one. It is usually nested
so that the ability to redefine labels at different levels
is available. All the rules of nesting as specified in NESTED
PROCS apply to FUNC.

An example of the function is the case where a particular
calculation is made throughout the coding. Providing that
all the values are known at assembly time, a FUNC could be
coded. Assume in the following example that a = 1, b = 2,
c = 3, and d = I+.

AVGCOS*

FUNC

A(l)

EQU

B(l)

EQU

cm

D(l)

EQU

EQU

END

AVGC0S(l)- ;; -AVGC0S(2)

AVGCOS(3)*AVGCOS(4)
A(l) + B(l)
AVGCOS (1)+AVGC0S( 3)
C(l)/D(l)

LA 12,AVGC0S(1,2,3,4), , 016
THIS LINE CONTAINS THE REFERENCE WHICH
WILL CAUSE GENERATION OF VALUE AT
ASSEMBLY TIME

CENFOR 20-30

March 1970

20.11.11. FUNC (Continued)

An example of a FUNC source code statement is written below.
It includes examples of FUNC structure, a nested procedure,
and function references. The value produced by reference to
SQRT FUNC will be the square root of the largest square which
is less than or equal to the parameter provided in the refer-
ence.

LINE

SQRT*

FUNC

A(l)

EQU

B(l)

EQU

c- ;; -

PROC

A*(l)

EQU

A(1)+2*B(1)+1

B*(D

EQU
END

B(l)+1

D

NAME
C

DO

SQRT(1)>A(1)

END

B(1)-(SQRT(1)

. 1

. 2
. 3
. 4
. 5
. 6
. 7
. 8
. 9
.10
.11

+ SQRT (64) .12

+ 2*SQRT(13) .13

END . 14

The actions taken by the assembler are listed below:

Lines 1-11 stored by the assembler for later reference.

Line 12 is a reference to SQRT FUNC with one parameter (64).
The reference produces a line with octal 000000000010.

Line 1 is the entrance to FUNC.

Line 2 equates a value of zero to A(l).

Line 3 equates a value of zero to B(l).

Line 9 is a reference to C PROC.

Line 4 is the entrance to C PROC. The first zero operand
expression indicates that no list is to be submitted to
C PROC when referenced. The second zero operand expression
indicates that no object coding will be produced by C PROC.

Line 5 equates a value to the label A(n). The value produced
is a result of the operand expression, and will be an ascending
sequence of squares (1,4,9. • .e ) •

March 1970 CENFOR 20-31

20.11.11. FUNC (Continued)

Line 6 equates a value to the label B(n). The value produced
is a result of the operand expression, and will be an ascending
sequence of square roots (1,2,3, . ..e ).

Line 7 terminates this iteration of C PROC.

Line 10 compares the value of the SQRT parameter (64.) to the
nth value of A. If it is greater, the GO line will be
executed once. Assembly continues at Line 8.

Line 8 is a NAME entry point.

Line 9 references C PROC for the second iteration.

If the SQRT parameter value is not greater than the value of A,

assembly continues at Line 11.

Line 11 terminates SQRT FUNC. The operand expression provides
the value of SQRT FUNC for this reference.

Line 13 is another reference to SQRT FUNC. The execution is
identical. The object line produced by this reference would
contain an octal value 000000000006.

Line 14 terminates the assembly or program.

20.11.12. WRD

The WRD directive is used to indicate the object computer
word size in bits. When an output word Is generated, it must
not exceed the stated output word size, or a truncation error
will be noted. This limitation does not have effect during
the evaluation of expressions, since values are limited only
to the 1107 word size, 36 bits. Only when a "line item" is
generated will the defined output word size be considered.

The format is :

WRD e

where e is any expression with a value equal to or less than 36,

This directive must precede lines of symbolic code which are
to be affected. If coded within a PROC, the procedure must
be explicitly referenced by name to get the effect. If a
PROC is used, do not code the second operand.

Exampl e : DEFS* PROC

WRD 30
END

After WRD is encountered by the assembler, its effect continues
until another is encountered. The WRD directive cannot be
used for programs to be executed on the 1107 or 1108.

CENFOR 20-32 March 1970

20.11.13. CHAR

The CHAR directive is used to alter translation of the 1107
character set to an alternate set of 6-bit equivalents. The
translation takes place any time the assembler encounters one
or more characters enclosed by apostrophes. The format is:

1' 1' 2' 2' n' n

where for each pair of expresions, c is the value of the

1107 character to be replaced by e. The value of both c and e

expressions must be between octal and octal 77.

EXAMPLE :

CHAR 6,024,7,025,010,026

where used, the Fieldata characters "A", "B", and "C" would
be given the values 02^,025,026 respectively. Alternately, if

I DO 3, CHAR 1+5, 1+023

were used, it would have the same effect.

This directive should precede any reference. The rules for
WRD placement are the same for this directive.

20.11.U. LI ST, UN LI ST

These two directives enable the programer to control the
listing of the assembler. The LIST directive negates the
effect of an "N" option or a previously used UNLIST directive
which suppressed the printing. The "N" option applies to
EXEC 8 only.

March 1970

CENFOR 20-33

20.11.15. EQUF

If repeated reference is made to the M, X and J fields of
an instruction word, it may be desirable to have one symbol
represent these fields -

The EQUF directive builds a nonliteral line item which
includes the M, X> J, H, and I subfields in the standard
instruction form. A field definition may be created and
referred to by label wherever needed. The line item in
EQUF is ORed with the referencing line to create an
instruction word.

The format of the EQUF directive is:

LABEL

EQUF

M,X,J

EXAMPLES:

FIELD EQUF -0100, *8, 14

LA A 4, FIELD

giving

10

00

04

00

00

16

00

10

3

10 16 04

10

000000 from LA line
000100 from EQUF

3 000100 output word

FSTR

EQU

20

FREGS

EQUF

FSTR+12, X4

SA

A 5, FREGS

giving

01
00

00
00

05 00
00 04

000000
000040

from SA line
from EQUF
output word

01

00

05 04

o 000040

EQUF
LA

TABL, *B4, SI

assuming that the relative address of TABL is 10164

then:

10 00 01 00 000000 from LA line

00 15 00 04 2 01016^ from EQUF

10 15

01

04 2 010164 output word

CENFOR 20-34 March 1970

20.12. COMMUNICATION BETWEEN FORTRAN AND SLEUTH II

20.12.1. COMMUNICATION BETWEEN FORTRAN AND SLEUTH II THROUGH USE OF
COMMON AREAS

It is possible to communicate information between FORTRAN and
SLEUTH elements in a program through use of common areas of
data storage. For instance, if a FORTRAN element contained
the following statement:

COMMON/TAG/A ( 500 ) , B , C ( 5 , 2 )

and it is wished that a SLEUTH II element have access to

A and/or B and/or C, then the SLEUTH II element should contain

the following coding in the declarative section:

TAG INFO 6 £

nn

where TAG must be the same as in the FORTRAN Common statement
and "nn" is an integer from 0-31 specifying a location counter.
In the body of the SLEUTH II element, there should be:

\$(nn).

A

RES

500

B

RES

1

C

RES

10

The RES declaratives for A, B, and C must be the first entries
under location counter "nn". Also the size and sequence of
the arrays A, B, and C must agree in both the FORTRAN and
SLEUTH II elements. However, names A, B, and C need not agree.

It is possible to follow this procedure for any number of
named Common areas using a different location counter for each
INFO statement. If you desire to use Blank Common, e.g.

COMMON A(500),B,C(5,2)

then the tag on the INFO line in the SLEUTH II element must be
3LNK.

An automatic table length tag is generated by any INFO statement
that defines a core DTABLE (Group 6) or magnetic drum table
(Group 7). This tag consists of L followed by the first 5 char-
acters of the table tag. The table length may be incremented
at load time by using this table length tag in a TAL card.
The length tag may also be referenced in the SLEUTH II coding.

March 1970 CENFOR 20-35

20.12.2. COMMUNICATION BETWEEN FORTRAN AND SLEUTH II THROUGH USE OF
ARGUMENT LISTS

A. General

In order to use Argument lists as a means of inter-element
communication, it is necessary for the Programer to be
familiar with the FORTRAN conventions for generating Sub-
routine and Function references.

When the compiler encounters a Call statement or a Function
reference, the following sequence is generated:

LMJ Bll, TAG

ARGUMENT LIST

NOP

where "TAG" is the name of a Function or Subroutine, and
entries in the Argument list can be any of three types:

VAR

where "VAR" is a variable name and the compiler generates

(nn)

where "nn" is a constant (either numeric or HOLLERITH (H.A.))

The compiler generates the address of a word containing the
constant or the address of the first word of a Hollerith
character string.

J xxL

where "xx" is a statement number corresponding to the
number following a "\$" in the Argument list.

Note: When a subroutine is referenced, values are returned
through the Arguments, but when a Function is referenced
a one-word result is returned in Register A0, or two-word
results (in A0 and Al) will be returned in the case of
double precision functions.

CENFOR 20-36 March 1970

20.12.2. COMMUNICATION BETWEEN FORTRAN AND SLEUTH II THROUGH USE OF
ARGUMENT LISTS (Continued)

B. Communication Between SLEUTH II Subroutine (or Function)
Called by FORTRAN Element

1. ARGUMENTS are accessed by using Register Bll, e. g.

L A0,0,B11

L A0,*0,B11

will load the actual contents of the Argument and

J 1, Bll

will transfer control to the Statement Number speci-
fied by the second Argument in the Call Statement.

2. To exit normally from a SLEUTH II Subroutine (or
Function) with n Arguments, code

J n+l,Bll

3. FORTRAN assumes that only Registers A0-A5, and
R1-R3 will be used by Subroutines or Functions. If
any others are used, they must be saved and restored
before exiting.

4. When writing a SLEUTH II Subroutine (or Function),
the entry point Tag (that is, the name by which the
Subroutine /Function will be referenced) must be
affixed with an '»*".

C. Communication Between FORTRAN Subroutine or Function Called

By SLEUTH II element

1. The programer must imitate the coding sequence generated
by FORTRAN (See Section A).

For example, if the FORTRAN Subroutine statement looked
like this

SUBROUTINE SUB(A,B,\$)

then the calling sequence might look like

LMJ Bll, SUB
+ A

(0)
J TAG
NOP
Note that, on lines containing Constants, the "+" is
not used since this would prevent the generation of a
literal.

March 1970 CENFOR 20-37

20.12.2. COMMUNICATION BETWEEN FORTRAN AND SLEUTH II THROUGH USE OF
ARGUMENT LISTS (Continued)

C. Communication Between FORTRAN Subroutine or Function
Called By SLEUTH II Element (Continued)

2. The FORTRAN Subroutine/Function will assume that
Registers A0-A5 and R1-R3 are available for use
and need not be saved and restored.

3. A reference to a FORTRAN Function will return a
one-word result in A.0.

D. Availability of FORTRAN Library Routines to SLEUTH II
Programer

1. All routines resident on the FORTRAN Library

(e. g. , SIN, COS, FOLION, LXB, etc.) are available
to the SLEUTH II programer. All that need be done
is to imitate the FORTRAN calling sequence to access
these routines (See Section C).

For example, to read an item from tape:

LMJ B11,ITMIN
( ' FNAME • )

+ ITEM

+ NN

J EOF
NOP

where "FNAME" is the file name and EOF is the label
of an End-Of-File routine,

XS3 with Ignore Fill:

LMJ

B11,LBX

+

(0)

NOP

S

2. The routines in FORLIB also assume that Registers
A0-A5 and R1-R3 are available without having to be
saved.

3. It must be noted that those Functions defined as
Built-in (MOD, MIN0, etc. - See Chapter 6 for complete
list of Built-in Functions) may not be referenced by
the above method, since references to these Functions
in FORTRAN generate in-line code rather than jumps to
Library Routines-

CENFOR 20-38

March 1970

20.13. APPENDIX C. INSTRUCTION REPERTOIRE

APPENDIX C. INSTRUCTION REPERTOIRE

SLEUTH 1

SLEUTH II

INSTRUCTION

MNEMONIC

f

J

MNEMONIC

INSTRUCTION

Store Positive

STP

01

0-15

SA

Store A

Store Negative

STN

02

0-15

SN
SNA

Store Negative A

Store Magnitude

STM

03

0-15

SM
SMA

Store Magnitude A

Store R

STR

04

0-15

SR

Store R

Store Zero

STZ

05

0-15

SZ

Store Zero

Store B

STB

06

0-15

SX

Store X

LDP

10

0-17

LA

LDN

11

0-17

LN
LNA

LDM

12

0-17

LM
LMA

LNM

13

0-17

LNMA

14

0-17

AA

Subtract

SUB

15

0-17

ANA

16

0-17

AM
AMA

Subtract Magnitude

SBM

17

0-17

ANM
ANMA

20

0-17

AU

SBL

21

0-17

ANU

Block Transfer

BTR

22

0-17

BT

Block Transfer

LDR

23

0-17

LR

24

0-17

AX

Subtract from B

SBB

25

0-17

ANX

LBM

26

0-17

LXM

LDB

27

0-17

LX

Multiply Integer

MPI

30

0-17

Ml

Multiply Integer

Multiply Single

MPS

31

0-17

MSI

Multiply Single Integer

Multiply Fractional

MPF

32

0-17

MF

Multiply Fractional

Divide Integer

DVI

34

0-17

Dl

Divide Integer

DVL

35

0-17

DSF

Divide Single Fractional

Divide Fractional

DVF

36

0-17

DF

Divide Fractional

March 1970

CENFOR 20-39

20.13. APPENDIX C. INSTRUCTIO N REPERTOIRE (Continued)

SLEUTH 1

SLEUTH II

INSTRUCTION

MNEMONIC

f

J

MNEMONIC

INSTRUCTION

Selective Set

SSE

40

0-17

OR

Logical OR

Selective Complement

SCP

41

0-17

XOR

Logical Exclusive OR

Selective Clear

SCL

42

0-17

AND

Logical AND

Selective Substitute

SSU

43

0-17

MLU

Selective Even Parity Test

SEP

44

Of-17

TEP

Test Even Parity

Selective Odd Parity Test

SOP

45

0-17

TOP

Test Odd Parity

Test Modifier

TMO

47

0-17

TLEM
TNGM

Test Less or Equal to Modifier
Test Not Greater than Modifier

Test Zero

TZR

50

0-17

TZ

Test for Zero

Test Not Zero

TNZ

51

0-17

TNZ

Test for Non Zero

Test Equal

TEQ

52

0-17

TE

Test for Equal

Test Not Equal

TNE

53

0-17

TNE

Test for Not Equal

Test Less Than or Equal

TLE

54

0-17

TLE
TNG

Test for Less or Equal
Test for Not Greater

Test Greater Than

TGR

55

0-17

TG

Test for Greater

Test Within Limits

TWL

56

0-17

TW

Test for Within Range

Test Outside Limits

TOL

57

0-17

TNW

Test for Not Within Range

Test Positive

TPO

60

0-17

TP

Test for Positive

Test Negative

TNG

61

0-17

TN

Test for Negative

Search Equal

SEQ

62

0-17

SE

Search for Equal

Search Not Equal

SNE

63

0-17

SNE

Search for Not Equal

Search Less Than or Equal

SLE

64

0-17

SLE
SNG

Search for Less or Equal
Search for Not Greater

Search Greater Than

SGR

65

0-17

SG

Search for Greater

Search Within Limits

SWL

66

0-17

SW

Search for Within Range

Search Outside Limits

SOL

67

0-17

SNW

Search for Not Within Range

Index Jump

IXJP

70

*

JGD

Jump on Greater and Decrement

MSEQ

71

00

MSE

MSNE

71

01

MSNE

Masked Search Less than or Equal

MSLE

71

02

MSLE
MSNG

Masked Search for Less or Equal

MSGR

71

03

MSG

MSWL

71

04

MSW

MSOL

71

05

MSNW

Masked Search for Not Within Range

The I and a designator* together aerve to apectty any of the 128 word* ol Film Store.

CENFOR 20-4-0

March 1970

20.13. APPENDIX C. INSTRUCTION REPERTOIRE (Continued)

SLEUTH 1

SLEUTH II

INSTRUCTION

MENMONIC

f

J

MNEMONIC

INSTRUCTION

Wait for Interrupt

WAIT

72

00

W

Wait

Return Jump

RTJP

72

01

SLJ

Store Location and Jump

Positive Bit Control Jump

PBJP

72

02

J PS

Jump on Positive and Shift

Negative Bit Control Jump

NBJP

72

03

JNS

Jump on Negative and Shift

72

04

AH

Subtract Halves

SUBH

72

05

ANH

72

06

AT

Subtract Thirds

SUBT

72

07

ANT

Execute Remote Instruction

EXRI

72

10

EX

Execute

LMLR

72

11

LL

Set Trace and Jump

STJP

72

12

Disable I/O Interrupts and Jump

DIJP

72

13

PAIJ

Prevent all Interrupts and Jump

Single Right Circular Shift

SCSH

73

00

SSC

Single Shift Circular

Double Right Circular Shift

DCSH

73

01

DSC

Double Shift Circular

Single Right Logical Shift

SLSH

73

02

SSL

Single Shift Logical

Double Right Logical Shift

DLSH

73

03

DSL

Double Shift Logical

Single Right Arithmetic Shift

SASH

73

04

SSA

Single Shift Algebraic

Double Right Arithmetic Shift

DASH

73

05

DSA

Double Shift Algebraic

Scale Factor Shift

SFSH

73

06

LSC

Zero Jump

ZRJP

74

00

JZ

Jump on Zero

Non-Zero Jump

NZJP

74

01

JNZ

Jump on Non Zero

Positive Jump

POJP

74

02

JP

Jump on Positive

Negative Jump

NGJP

74

03

JN

Jump on Negative

Console Selective Jump
Unconditional Jump

CSJPl
JUMP)

74

04

{T

Jump on Keys
Jump

Selective Stop Jump

SSJP

74

05

(hkj

(HJ

Halt on Keys and Jump
Halt and Jump

No Operation

NCOP

74

06

NOP

No Operation

Enable I/O Interrupts and Jump

EIJP

74

07

AAIJ

Allow Ail Interrupts and Jump

Even Jump

EVJP

74

10

JNB

Jump on No Low Bit

Odd Jump

ODJP

74

11

JB

Jump on Low Bit

Modifier Jump

MOJP

74

12

JMGI

Jump Modifier Greater and Increment

LMJP

74

13

LMJ

Overflow Jump

OVJP

74

14

JO

Jump on Overflow

No Overflow Jump

NOJP

74

15

JNO

Jump on No Overflow

March 1970

CENFOR 20-4.1

20.13. APPENDIX C. INSTRUCTION REPERTOIRE (Continued)

SLEUTH 1

SLEUTH II

INSTRUCTION

MNEMONIC

f

J

MNEMONIC

INSTRUCTION

Cany Jump

CYJP

74

16

JC

Jump on Carry

No Carry Jump

NCJP

74

17

JNC

Jump on No Carry

Initiate Input Mode

IIPM

75

00

LIC

Initiate Monitored Input Mode

IMIM

75

01

LICM

Input Mode Jump

IMJP

75

02

JIC

Jump on Input Channel Busy

Terminate Input Mode

TIPM

75

03

DIC

Disconnect Input Channel

Initiate Output Mode

10PM

75

04

LOC

Initiate Monitored Output Mode

IMOM

75

05

LOCM

Output Mode Jump

OMJP

75

06

JOC

Jump on Output Channel Busy

Terminate Output Mode

TOPM

75

07

DOC

Disconnect Output Channel

Initiate Function Mode

IFNM

75

10

LFC

Initiate Monitored Function Mode

IMFM

75

11

LFCM

Load Function in Channel and Monitor

Function Mode Jump

FMJP

75

12

JFC

Jump on Function in Channel

Force External Transfer

FEXT

75

13

AFC

Allow Function in Channel

Enable All External Interrupts

EAEI

75

14

AACI

Allow All Channel Interrupts

Disable All External Interrupts

DAEI

75

15

PACI

Prevent All Channel Interrupts

Enable Single External Interrupt

ESEI

75

16

ACI

Allow Channel Interrupt

Disable Single External Interrupt

DSEI

75

17

PCI

Prevent Channel Interrupt

76

00

FA

Floating Subtract

FLSB

76

01

FAN

Floating Multiply

FLMP

76

02

FM

Floating Multiply

Floating Divide

FLDV

76

03

FD

Floating Divide

Floating Point Unpack

FLUP

76

04

LUF

Floating Point Standardize Pack

FLNP

76

05

LCF

Floating Characteristic Difference

FLCM

76

06

MCDU

Magnitude of Characteristic Difference

Magnitude

to Upper

Floating Characteristic Difference

FLCD

76

07

CDU

Characteristic Difference to Upper

21. GLOSSARY

Page 1

GLOSSARY

ABSOLUTE ADDRESS : (1) An address that is permanently assigned by the
machine designer to a storage location; (2) a pattern of characters
that identifies a unique location without further modification.

ADDRESS : An identification as represented by a name, label, or number,
for a register, location in storage or any other data source or desti-
nation.

ALPHANUMERIC : Pertaining to a character set that contains both letters
and digits and usually other characters such as punctuation marks.
Synonymous with alphameric.

ANALYSIS : The methodical investigation of a problem, and the separation
of the problem into smaller related units for further detailed study.

ARGUMENT : An independent variable.

ARITHMETIC SHIFT : A shift that does not affect the sign position.

ARITHMETIC UNIT : The unit of a computing system that contains the
circuits that perform arithmetic operations.

ARRAY : An arrangement of elements in one or more dimensions.

ASSEMBLE i To prepare a machine language program from a symbolic
language program by substituting absolute operation codes for symbolic
operation codes and absolute or relocatable addresses for symbolic

AUTOMATIC DATA PROCESSING : The performance of operations upon information
by a system of electronic or electrical machine so interconnected and
interacting as to reduce to a minimum the need for human assistance or
intervention.

BIAS : The amount by which the average of a set of values departs from
a reference value.

BINARY : Pertaining to a characteristic or property involving a selection,
choice or condition in which there are two possibilities.

BINARY-CODED DECIMAL NOTATION : A positional notation in which the
individual decimal digits expressing a number in decimal notation are
each represented by a binary numeral; BCD.

BINARY SEARCH : A dichotomizing search in which the number of items of
the set is divided into two equal parts at each step of the process.

BISTABLE : Pertaining to a device capable of assuming either one of two
stable states.

Page 2

GLOSSARY (Continued)

BIT : An abbreviation of binary digit; a single character in a binary
number.

BLOCK : A set of things, such as words, characters, or digits handled
as a unit.

BUFFER : Intermediate storage area used when an item is being transferred
from file to computer memory. Data conversion may be performed during
the transfer from buffer to the memory.

CENTRAL PROCESSING UNIT : A unit of a computer that includes the circuits
controlling the interpretation and execution of instructions.

CHARACTER : A letter, digit, or other symbol that is used as part of
the organization, control, or representation of data.

CLEAR : To place one or more storage locations into a prescribed state,
usually zero or the space character.

CODE : To represent data or a computer program in a symbolic form that
can be accepted by a data processor.

COMPILE : To prepare a machine language program from a computer program
written in another programing language by making use of the overall
logic structure of the program, or generating more than one machine
instruction for each symbolic statement, or both, as well as performing
the function of an assembler.

COMPUTER, ANALOG : A computer which represents variables by physical
analogies. Thus any computer which solves problems by translating
physical conditions such as flow, temperature, pressure, angular posi-
tion, or voltage into related mechanical or electrical quantities and
uses mechanical or electrical equivalent circuits as an analog for the
physical phenomenon being investigated.

COMPUTER, DIGITAL : A computer which processes data represented by
combinations or discontinuous data as compared with an analog computer
for continuous data.

CONSOLE : That part of a computer used for communication between the
operator or maintenance engineer and the computer.

CONSTANT : (l) The quantities or messages, which will be present in the
machine and available as data for the program and which, usually are not
subject to change with time. (2) Information whose value or meaning
is fixed for the program to which it belongs.

Page 3

GLOSSARY (Continued)

CONTROL UNIT : In a digital computer, those parts that effect the retrieval
of instructions in proper sequence, the interpretation of each instruction,
and the application of the proper signals to the arithmetic unit and
other parts in accordance with this interpretation.

CONVERT : To change numerical information from one number base to another,
and/or from some form of fixed point to some form of floating point
representation or vice versa.

DATA : A representation of facts, concepts, or instructions in a formalized
manner suitable for communication, interpretation or processing by humans
or automatic means.

DATA BANK : A comprehensive collection of libraries of data.

DATA PROCESSING : The execution of a systematic sequence of operations
performed upon 'data.

DEBUG : To detect, locate and remove mistakes from a routine or malfunctions
from a computer.

DECK : A collection of punched cards.

DECODE : Ascertain the intended meaning of the individual characters or
groups of characters in the pseudo-coded program.

DOUBLE PRECISION : Pertaining to the use of two computer words to
represent a number.

DUMMY : An artificial address, instruction, word, item, or other unit
of information inserted solely to fulfill certain prescribed require-
ments, such as dummy parameters, without affecting operations.

DUMP ; To copy the contents of all or part of a storage, usually from
an internal storage into an external storage.

EDIT : To modify the form or format of data.

EFFECTIVE ADDRESS : The address that is derived by applying any specified
is actually used to identify the current operand.

ENTRY POINT : In a routine, any place to which control can be passed.

FIELD : In a record, a specified area used for a particular category of
data.

FILE : An organized collection of information on external devices treated
as a unit. For example, one line of an invoice may form an item , a
complete invoice may form a record , and the complete set of such records
may form a file , the collection of inventory control files may form a
library and the libraries used by an organization are known as its
data bank.

Page 4-

GLOSSARY (Continued)

FIXED POINT REPRESENTATION ; A positional representation in which each
number is represented by a single set of digits, the position of the
radix point being fixed with respect to one end of the set, according to
some convention.

FLOWCHART : A graphical representation for the definition, analysis,
or solution of a problem, in which symbols are used to represent
operations, data, flow, equipment, etc.

FORMAT : The arrangement of data.

GENERATOR, PROGRAM : A program which permits a computer to write other
programs automatically.

HARDWARE : Physical equipment used for processing data; e.g. mechanical,
magnetic, electrical, or electronic devices.

HOLLERITH : Pertaining to a particular type of code or punched card
utilizing 12 rows per column and usually 80 columns per card.

I/O : Input/Output

INDEX : A symbol or a number used to identify a particular quantity in
an array of similar quantities.

INITIALIZE : To set counters, switches, and addresses to zero or other
starting values at the beginning of, or at prescribed points in, a
computer routine.

INPUT : The transfer of data from an external storage medium into the
internal storage of the computer.

INSTRUCTION : A statement that specifies an operation and the values or
locations of its operands. It, as a unit, causes the computer to
perform the operation on the indicated quantities.

INTERRUPT : To stop a process in such a way that it can be resumed.

JOB : A specified group of tasks prescribed as a unit of work for a
computer. A job usually includes all necessary computer programs,
linkages, files, and instructions to the operating system.

JUMP : A departure from the normal sequence of executing instructions
in a computer; transfer.

JUSTIFY : (1) To adjust the printing positions of characters on a page
so the lines have the desired length and both the left and right hand
margins are regular. (2) By extension, to shift the contents of a
register so the most or the least significant digit is at some specified
position in the register.

Page 5

KEY : One or more characters within an item of data that are used to
identify it or control its use.

KEYPUNCH : A keyboard actuated device that punches holes in a card to
represent data.

LIBRARY : A collection of related files.

LOAD : In programing, to enter data into storage or working registers.

LOOP : A sequence of instructions that is executed repeatedly until a
terminal condition prevails.

MAGNETIC CORE : A configuration of magnetic material that is, or is
intended to be, placed in a special relationship to current-carrying
conductors and whose magnetic properties are essential to its use.
It may be made of such material as iron, iron oxide, or ferrite and in
such shapes as wires, tapes, toroids or thin film.

MAGNETIC DISK : A flat circular plate with a magnetic surface on which
data can be stored by selective magnetization of portions of the flat
surface .

MAGNETIC DRUM : A right circular cylinder with a magnetic surface on
which data can be stored by selective magnetization of portions of the
curved surface.

MAGNETIC TAPE : A tape with a magnetic surface on which data can be
stored by selective polarization of portions of the surface.

MAGNETIC THIN FILM : A layer of magnetic material, usually less than
one micron thick, often used for logic or storage elements.

MASK : A pattern of characters that is used to control the retention
or elimination of portions of another pattern of characters.

MATRIX : (l) In mathematics, a two-dimensional rectangular array of
quantities. (2) In computers, a logic network in the form of an array
of input leads and output leads with logic elements connected at some
of their intersections.

MERGE : To combine items from two or more similarly ordered sets into
one set that is arranged in the same order.

MICROSECOND : One-millionth of a second.

MILLISECOND : One-thousandth of a second.

MNEMONIC SYMBOL : A symbol chosen to assist the human memory, e.g. an
abbreviation such as "mpy" for "multiply."

MONITOR : Software or hardware that observes, supervises, controls or
verifies the operations of a system.

Page

GLOSSARY (Continued)

MULTIPLE PUNCHING : Punching more than one hole in the same column on
a punched card by means of more than one keystroke.

MULTIPROGRAMING : Pertaining to the concurrent execution of two or
more programs by a computer.

NEST : To imbed subroutines or data in other subroutines or data at a
different hierarchal level such that the different levels of routines
or data can be executed or accessed recursively.

OBJECT PROGRAM : A fully compiled or assembled program that is ready to

OFF-LINE : Pertaining to equipment or devices not under direct control
of the central processing unit.

ON-LINE : Pertaining to equipment or devices under direct control of
the central processing unit.

OPEN SHOP : Pertaining to the operation of a computer facility where
computer programing, coding, and operating can be performed by any
qualified employee of the organization.

OPERAND : That which is operated upon.

OPERATION : A defined action, namely, the act of obtaining a result from
one or more operands in accordance with a rule that completely specifies
the result for any permissible combination of operands.

PACK : To compress data in a storage medium by taking advantage of
known characteristics of the data, in such a way that the original data
can be recovered.

PARAMETER: A variable that is given a constant value for a specific
purpose or process.

PERIPHERAL EQUIPMENT : Any unit of equipment distinct from the central
processing unit, which may provide the system with outside communication.

PRECISION : The degree of discrimination with which a quantity is stated.

PROGRAM: A series of actions proposed in order to achieve a certain
result.

RADIX POINT : The real or implied character that separates the digits
associated with the integral part of a numeral from those associated
with the fractional part.

READ : To acquire or interpret data from a storage device, a data medium,
or any other source.

Page 7

GLOSSARY (Continued)

RECORD : A collection of related items of data, treated as a unit.

ROLL IN : To restore in main storage data which had previously been
transferred from main storage to auxiliary storage.

ROLL OUT : To record on an auxiliary storage device the contents of
main storage.

RUN: A single, continuous performance of a computer routine.

SCALE : To examine sequentially part by part.

SEARCH KEY : Data to be compared to specific parts of each item for the
purpose of conducting a search.

SENTINEL : A symbol marking the beginning or the end of some piece of
information such as a field, item, block, tape, etc.

SERIAL : Pertaining to the sequential or consecutive occurrence of
two or more related activities in a single device or channel.

SERVICE ROUTINE : A routine in general support of the operation of a
computer, e.g., an input/output, diagnostic, tracing, or monitoring
routine.

SHIFT: A movement of data to the right or left.

SIGNIFICANT DIGIT : A digit that is needed for a certain purpose,
particularly one that must be kept to preserve a specific accuracy or
precision.

SOFTWARE : A set of computer programs, procedures, rules, and possible
associated documentation concerned with the operation of a data pro-
cessing system, e.g., compilers, library routines, manuals, circuit
diagrams .

SORT : To segregate items into groups according to some definite rules.

SOURCE LANGUAGE : The language in which the programer codes and which

is translated by the compiler into the object language which the computer

can comprehend.

STORAGE ALLOCATION : The assignment of blocks of data to specified
blocks of storage.

STRAIGHT LINE CODING : Coding in which loops are avoided by the repetition
of parts of the coding when required.

programer.

Page 8

GLOSSARY (Continued)

SYMBOLIC CODING : Coding that uses machine instructions with symbolic

SYNTAX : The structure of expressions in a language.

SYSTEM, ELECTRONIC DATA PROCESSING : The general term used to define
a system for data processing by means of machines utilizing electronic
circuitry at electronic speed as opposed to electromechanical equip-
ment .

TABLE LOOK-UP : A procedure for obtaining the function value corresponding
to an argument from a table of function values.

WORD : A character string or a bit string considered as an entity.

WRITE : To record data in a storage device or a data medium.

BIBLIOGRAPHY

UNIVAC 1107 MANUALS:

Central Computer UP-24-63 Rev. 2

EXEC I UP-2577 Rev. 2

FORTRAN IV Fundamentals UP-7536 Rev. 1

FORTRAN IV Library Subroutines UP-3947

FORTRAN IV Programmers Guide UP-354-0 D

FORTRAN IV Programmers Reference Manual UP-3569 Rev. 1

LION UP-2581 Rev. 2

PROCS General Discussion UP-2593.33

SLEUTH I UP-2574 Rev. 2

SLEUTH II UP-3670 Rev. 1

SORT/MERGE I UP-3958

UNIVAC 1108 MANUALS:

FORTRAN V Programmers Reference UP-^060 Rev. 1

STAT-PACK Program Abstracts UP-4.O4.I Rev. 2

MATH-PACK Program Abstracts UP-4-051

Assembler Procedures UP-4.04-2

EXEC 8 Programmers Reference UP-4144- Rev. 1

1106/1108 Assembler Programmers Reference UP-^O^O Rev. 2

BOOKS:

McCracken, Daniel D. , A Guide To FORTRAN IV Programming , John Wiley
Sons, Inc., New York, New York, 1968.

MISCELLANEOUS:

Bureau of the Census Memoranda, Notes, Training Material, and
Computer Systems Manual.

PENN n S .T AT F .WERSITY LIBRARIES

AODDD7Dfl c nm43